Как идентифицировать запись DATETIME NULL в T-SQL? - PullRequest
0 голосов
/ 05 июля 2011

Я разрабатываю запрос tsql ниже.Как определить записи, содержащие в себе «1900%»?

SELECT DISTINCT TICKET, COMPLAINT_LEVEL, COMPLETION_DATE, DATE_FILTER, YEAR(DATE_FILTER) AS YEAR_FILTER, MONTH(DATE_FILTER) AS MONTH_FILTER,
left(datename(month, DATE_FILTER), 3) + ' ''' +
RIGHT(year(DATE_FILTER), 2) AS SHORT_DATE_FILTER,
CASE WHEN DATE_FILTER < MONTH_END AND MONTH_END < CURRENT_DATE_END AND COMPLETION_DATE IS NULL THEN DATE_FILTER 
 WHEN DATE_FILTER < MONTH_END AND MONTH_END < CURRENT_DATE_END AND
 COMPLETION_DATE IS NOT NULL AND ABS(DATEDIFF(DAY, COMPLETION_DATE, MONTH_END)) >= 1 AND DATE_FILTER < CURRENT_DATE_END THEN DATE_FILTER
 ELSE 0 END AS ROW_TYPE
FROM #TEMP
--WHERE row_type = 0
--line above does not work

И вот как выглядит мой вывод enter image description here

Ответы [ 3 ]

2 голосов
/ 05 июля 2011
WHERE DATEPART(year, ROW_TYPE) = 1900

http://msdn.microsoft.com/en-us/library/ms174420.aspx

1 голос
/ 05 июля 2011

Похоже, что нет даты и времени с нулевым значением.

Хотя выглядит заманчиво просто проверить row_type. Это не будет работать, это вычисляемый столбец. Вам нужно изменить свой сценарий на это, чтобы проверить тип row_type, иначе вам нужно сравнить его со всем выражением, генерирующим вычисляемый столбец.

SELECT * FROM (
SELECT DISTINCT TICKET, COMPLAINT_LEVEL, COMPLETION_DATE, DATE_FILTER, YEAR(DATE_FILTER) AS YEAR_FILTER, MONTH(DATE_FILTER) AS MONTH_FILTER, 
left(datename(month, DATE_FILTER), 3) + ' ''' + 
RIGHT(year(DATE_FILTER), 2) AS SHORT_DATE_FILTER, 
CASE WHEN DATE_FILTER < MONTH_END AND MONTH_END < CURRENT_DATE_END AND COMPLETION_DATE IS NULL THEN DATE_FILTER  
 WHEN DATE_FILTER < MONTH_END AND MONTH_END < CURRENT_DATE_END AND 
 COMPLETION_DATE IS NOT NULL AND ABS(DATEDIFF(DAY, COMPLETION_DATE, MONTH_END)) >= 1 AND DATE_FILTER < CURRENT_DATE_END THEN DATE_FILTER 
 ELSE 0 END AS ROW_TYPE 
FROM #TEMP ) a
WHERE YEAR(ROW_TYPE) = 1900
0 голосов
/ 05 июля 2011

Это также будет работать:

WHERE ROW_TYPE = 0

Но, как правильно указал @t-clausen.dk, на столбец ROW_TYPE нельзя ссылаться в предложении WHEREтого же SELECT.Обычно вы добавляете внешний SELECT, к которому будут доступны все псевдонимы внутреннего SELECT.

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