Sql 转换日期时转换失败
我将日期存储为Sql 转换日期时转换失败,sql,tsql,Sql,Tsql,我将日期存储为varchar(50)1/7/1958'我希望将其转换为日期 我已经试过了 选择convert(日期,(左(出生日期,10))并获得以下错误 从字符串转换日期和/或时间时,转换失败 当我删除列名并硬编码日期时 选择转换(日期,(左('1/7/1958',10))我得到这个1958-01-07我想转换并插入到日期字段中 这就是我正在使用的代码 SELECT LTRIM(RTRIM(CONVERT(DATE, (LEFT(date_of_birth, 10))))) FROM empl
varchar(50)
1/7/1958'
我希望将其转换为日期
我已经试过了
选择convert(日期,(左(出生日期,10))
并获得以下错误
从字符串转换日期和/或时间时,转换失败
当我删除列名并硬编码日期时
选择转换(日期,(左('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')
任何建议都很好。首先,日期上的LTRIM()
和RTRIM()
没有意义。这些是字符串函数,不是日期函数
其次,简单的方法是使用try\u convert()
:
第三,您可能需要确定在早期版本的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-yyy,使用“110”。即使“10”有效,也会产生误导。修复您的数据库,使日期存储为日期。您所做的只是错误。我会使用该功能:
中的值不在
条件下,例如0000354-1、0000423-1等。
不是日期。这就是为什么会出现错误,您正在比较date
和char/string
数据类型。您使用的SQL Server版本是什么?
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)
SELECT CONVERT(DATE, date_of_birth)
FROM employee_temp
WHERE ISDATE(date_of_birth) = 1;