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;