SQL Server, выберите CASE с другим приведением - PullRequest
2 голосов
/ 13 мая 2010

Я хочу сделать выбор, который выполняет приведение только для определенного идентификатора, но, похоже, он не работает.

Пример:

SELECT
  CASE
    WHEN(@ID <> 1) THEN Code
    WHEN(@ID = 1) THEN Cast(Code AS int)
  END Code FROM ....

Любая идея?

Ответы [ 3 ]

2 голосов
/ 13 мая 2010

Почему вы хотите это сделать? Выражение SQL Server имеет один фиксированный тип. Другими словами, одно выражение не может быть varchar(50) или int в зависимости от того, как выражение вычисляется. Вы можете привести каждое дело к sql_variant, но это может иметь или не иметь смысла в зависимости от того, что вы пытаетесь сделать.

EDIT

Если вы выполняете этот запрос из хранимой процедуры, вы можете создать блок IF..ELSE для выполнения другой версии запроса на основе значения @ID. Например:

IF (@ID = 1) BEGIN
    SELECT Cast(Code AS int) AS Code FROM ...
END
ELSE BEGIN
    SELECT Code FROM ...
END
1 голос
/ 13 мая 2010

Это работает для меня. Проверьте, имеет ли @ id тип int и можно ли привести все значения столбца Code к int .

ОБНОВЛЕНИЕ Если у вас есть значение, которое нельзя преобразовать в int, ваш запрос не будет работать.

Таким образом, вы можете написать 2 разных запроса.

что-то вроде

IF @id = 1 THEN
 SELECT code ...
ELSE 
 SELECT Cast(Code AS int) as Code
0 голосов
/ 13 мая 2010

Вы могли бы также написать:

select case when @ID = 1 then CAST(Code as int) else Code end as Code
    from...

Кстати, любые данные, содержащие буквенные символы, не будут преобразованы в int.

Может быть, мы могли бы помочь вам лучше, если вы сообщите нам, чего вы хотите достичь, предоставив некоторые образцы данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...