2012-06-13 4 views
-1

У меня есть стол, в котором есть столбец, ci_birthday. Столбец объявлен как nvarchar(50), формат mm-dd-yyyy. Данные в таблице, как это:# получение месяца и дня с даты #

CI_BIRTHDAY 
----------- 

07/14/1956 
NULL 
NULL 
11/01/1969 
08/15/1955 
07/08/1965 
NULL 
NULL 
09/20/1936 
NULL 
NULL 
NULL 
NULL 
0/0/0 
NULL 
NULL 
NULL 
NULL 
NULL 
0/0/0 
NULL 
NULL 
1/29/1940 
NULL 
0/0/0 
NULL 
NULL 
NULL 
NULL 
08/11/1949 

Я хочу, чтобы выход из этого столбца только месяц и день, как

09/20 
0/0 
1/29 
08/11 
0/0  
+2

Как работает 0/0 действующий месяц/день? –

+0

Если вы использовали поле даты, вы могли использовать встроенные функции SQL Server MONTH() и DAY()? – Jake1164

+1

Также вы говорите, что это mm-dd-yyyy, тогда почему это 07/14/1956? А иногда 0/0/0, а иногда и ведущее 0 отсутствует (например, 1/29/1940)? Я настоятельно рекомендую вам очистить эти данные и использовать правильный тип данных. Нет абсолютно никакой причины, по которой вы должны хранить дни рождения в nvarchar (50). Никто. –

ответ

0

Я принимаю мое решение очень плохой способ решения этого, но если дата не сохраняется в формате даты (в этом случае его строка), то вы можете сделать что-то вроде этого:

DECLARE @Date varchar(15) = '11/01/1969' 
SELECT SUBSTRING(@Date, 1,LEN(@Date) - PATINDEX('%/%',REVERSE(@Date))) 
0

Просто, чтобы показать, как бросить это очень грязный данные в даты после проверки, что это безопасно делать так:

SET DATEFORMAT mdy; 

WITH Dates 
      AS (SELECT '07/14/1956' AS DateStr 
       UNION 
       SELECT '11/01/1969' 
       UNION 
       SELECT '08/15/1955' 
       UNION 
       SELECT '07/08/1965' 
       UNION 
       SELECT '09/20/1936' 
       UNION 
       SELECT '0/0/0' 
       UNION 
       SELECT NULL 
       UNION 
       SELECT '1/29/1940' 
      ) 
    SELECT CASE WHEN ISDATE(DateStr) = 1 THEN CONVERT(VARCHAR(5), CONVERT(DATE, DateStr, 101), 101) 
       ELSE '00/00' 
      END AS [DD/MM] 
    FROM Dates