我将日期存储为varchar(50)
1/7/1958'
我希望将其转换为日期。
我试过这个;
select convert(date,(left(date_of_birth,10))
并收到以下错误消息。
从字符串转换日期和/或时间时转换失败。
当我删除列名并硬编码日期
select convert(date,(left('1/7/1958',10)))
我得到此1958-01-07
我想转换并插入日期字段。
这是我正在使用的代码。
SELECT LTRIM(RTRIM(CONVERT(DATE, (LEFT(date_of_birth, 10)))))
FROM employee_temp WHERE date_of_birth NOT IN ('0000160-1'
, '0000354-1'
, '0000423-1'
, '0000478-1'
, '0000509-1'
, '0000616-1'
, '0001017-1'
, '0001183-1'
, '0001208-1'
, '0001298-1'
, '0001358-1'
, '0001427-1'
, '0001500-1'
, '0001823-1'
, '0001919-1'
, '0001941-1'
, '0001968-1'
, '0001999-1'
, '0002029-1'
, '07/28/0966'
, ' '
, '8')
任何建议都会很棒。
答案 0 :(得分:0)
首先,LTRIM()
和RTRIM()
在某个日期没有意义。这些是字符串函数,而不是日期函数。
其次,简单的方法是使用try_convert()
:
SELECT TRY_CONVERT(DATE, LEFT(date_of_birth, 10), 10)
第三,您可能需要确定SQL Server早期版本中的日期格式是否正确。为此,请使用case
:
SELECT (CASE WHEN date_of_birth LIKE '[01][0-9]-[0-3][0-9]-[0-9][0-9]%'
THEN CONVERT(DATE, LEFT(date_of_birth, 10))
END)
我注意到你正在使用格式" 10"但对于一个10个字符的字符串。格式" 10"正式是MM-DD-YY。对于MM-DD-YYYY使用" 110"。即使" 10"有效,这是误导。
答案 1 :(得分:0)
修复您的数据库,以便将日期存储为日期。你正在做的事情是错的。
答案 2 :(得分:0)
我会使用ISDATE()功能:
SELECT CONVERT(DATE, date_of_birth)
FROM employee_temp
WHERE ISDATE(date_of_birth) = 1;