在SQL中标准化日期。算术溢出

时间:2012-01-20 18:07:21

标签: sql-server-2005 datetime

我有一个字符串字段dob,它有各种格式的生日,例如。

DOB

1945年7月1日 1967年1月7日
1956年5月13日

1947年5月8日
1953年9月27日 1952-3-25

我尝试使用MS SQL 2005创建标准化日期字段

select convert(datetime,dob,103)
from myTable

我得到一个算术溢出,似乎与最后一个值相关联,可能是因为它试图将25转换为一天当它是一天 我试过了     将语言设置为英国和其他各种风格没有成功

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

为什么要尝试以给定格式存储它?你能不能把它存储为日期时间类型?将其存储在独立于区域设置中的最大优点是,您可以将表示逻辑卸载到它所属的UI。另外,你可以避免凌乱的情况,你的DOB为3-4-5(2003年4月5日,2005年3月4日,2005年4月3日)。

转换为日期时间对我来说很合适(美国语言环境)。

; with myTable (dob)as
(
    select 'July 1, 1945'
    UNION ALL SELECT '1967-1-7'
    UNION ALL SELECT '13 May 1956'
    UNION ALL SELECT '8 may 1947'
    UNION ALL SELECT '27 september 1953'
    UNION ALL SELECT '1952-3-25'
)
SELECT
    cast(T.dob AS datetime) AS real_datetime
,   T.dob
FROM
    myTable T

结果

real_datetime   dob
1945-07-01 00:00:00.000 July 1, 1945
1967-01-07 00:00:00.000 1967-1-7
1956-05-13 00:00:00.000 13 May 1956
1947-05-08 00:00:00.000 8 may 1947
1953-09-27 00:00:00.000 27 september 1953
1952-03-25 00:00:00.000 1952-3-25