将 varchar(14) 转换为 datetime 会导致异常

convert a varchar(14) to a datetime cause a exception

我有一个数据库,里面有我的病人。患者有进入和退出日期 是字符串。

例如:20130510183900 (10-05-2013 18:39) 首先是数据库中的那个,然后是我需要的值

我想将其转换为日期时间,以便与其他日期进行比较。

我也无法在视图中显示它的转换

我已经尝试先将其转换为 varchar 或 int,但没有成功

convert(datetime, enterDate, 121) -- does not work
convert(datetime, enterDate, 121) AS enterDate -- does not work

我得到的错误是:

Conversion failed when converting date and/or time from character string.

将日期时间值存储为字符串是错误的。话虽如此,你可以使用DATETIMEFROMPARTS函数:

SELECT DATETIMEFROMPARTS(
    SUBSTRING(enterDate,  1, 4),
    SUBSTRING(enterDate,  5, 2),
    SUBSTRING(enterDate,  7, 2),
    SUBSTRING(enterDate,  9, 2),
    SUBSTRING(enterDate, 11, 2),
    SUBSTRING(enterDate, 13, 2),
    0
)
FROM (SELECT '20130510183900') AS v(enterDate)

同样,将日期时间值存储为字符串是错误的。

另一种选择是使用 stuffconvert 的组合:

DECLARE @DateString varchar(14) = 20130510183900 

SELECT CONVERT(DateTime,
                STUFF(
                    STUFF(
                        STUFF(
                            STUFF(
                                STUFF(@DateString, 13, 0, ':')
                            , 11, 0, ':')
                        , 9, 0, 'T')
                    , 7, 0, '-')
                , 5, 0, '-'),
               126)

stuff 函数将字符串转换为 2013-05-10T18:39:00 并且带有 126 样式的 convert 将其更改为 DateTime 值。

但我同意 Salman 的观点——将日期时间值存储为字符串是错误的。

试试这个:

DECLARE @DateString varchar(14) = '20130510183900'

-- desired format: '20130510 18:39:00'
SET @DateString = STUFF(STUFF(STUFF(@DateString,13,0,':'),11,0,':'),9,0,' ')

SELECT CONVERT(datetime, @DateString)
-- Output: 2013-05-10 18:39:00.000

您的问题是输入字符串,sql 不调整字符串就无法解决这个问题。顺便说一句:Convert() 的第三个参数用于 cast/format 日期时间到字符串:

SELECT CONVERT(VARCHAR, CONVERT(datetime, @DateString), 101)
-- Output: 05/10/2013

select中的用法:

SELECT CONVERT(datetime, STUFF(STUFF(STUFF(<DateTimeStringColumn>,13,0,':'),11,0,':'),9,0,' ')) AS DateTimeValue
FROM ...