SQL-запрос Использование CASE внутри Select - PullRequest
0 голосов
/ 28 июня 2011

Здравствуйте, у меня есть SQL-запрос:

select DateDiff(d,StartDate, EndDate) DaysEmployed from ClientDayActivity

Я хочу, чтобы это стало таким:

EmployDays = CASE WHEN NOT end_date IS NULL THEN
DATEDIFF(d,start_date, end_date) ELSE   
DATEDIFF(d,start_date, CONVERT(DATETIME, '" & Cstr(strEndDate) & "', 102)) END

Я выбрал этот запрос из старого приложения и должен использовать его в соответствии с моей БД и приложением. я поднял этот запрос из кода asp, у них была строка запроса. Как и я не понимаю, что это: '" & Cstr(strEndDate) & "'

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 28 июня 2011

'" & Cstr(strEndDate) & "' Это похоже на динамический оператор SQL от VB.

strEndDate было именем некоторой переменной, которая, вероятно, содержала дату, которая затем была преобразована в строку с использованием Cstr и затем добавлена ​​в оператор SQL.

Если вы хотите сделать что-то подобное в хранимом процессе, вы, вероятно, захотите

EmployDays = CASE WHEN NOT end_date IS NULL THEN
DATEDIFF(d,start_date, end_date) ELSE   
DATEDIFF(d,start_date, @end_date) END

, где @end_date - параметр. В качестве альтернативы вы можете использовать GetDate(), который использовал бы сегодняшнюю дату, что имело бы некоторый смысл, учитывая логику оператора case и псевдоним столбца

Вот пример для выбора

SELECT
    CASE 
      WHEN NOT end_date IS NULL THEN
        DATEDIFF(d,start_date, end_date) 
     ELSE   
       DATEDIFF(d,start_date, @end_date) 
   END as EmployDays,
   some_other_field
FROM
       sometable
...