繁体   English   中英

将nvarchar转换为datetime

[英]converting nvarchar to datetime

我们有一个表,其中包含数据类型为nvarchar(254) 此列按以下格式存储日期和时间:

12-MAR-15 04.07.36.000000000 PM

我们需要将其转换为datetime格式,以便我们可以运行时间相关的查询来提取所需的结果。 此数据不以CAST和CONVERT文档页面中提到的任何格式存储

我试过130131但没有运气。

这里的格式似乎是dd-mon-yy hh.mm.ss.mmmmmmm PM

有谁知道我们应该如何将其转换为'datetime'格式?

任何帮助将非常感激。

首先,将日期存储为字符串是一个坏主意。 这是使用STUFFREPLACE函数将它们转换回日期时间的一种方法

我假设你的所有日期都在2000年之后。

declare @d nvarchar(256) = '12-MAR-15 04.07.36.000000000 PM'

SELECT CONVERT(DATETIME, 
        STUFF(
         REPLACE(REPLACE(
          STUFF(@d, 23, 7, ''), '-',' '),'.',':'), 8,0,'20')  )

基本上,您需要将日期字符串转换为SQL Server支持的那些样式之一。 在下面的示例中,我的目标日期样式109( mon dd yyyy hh:mi:ss:mmmAM ):

-- character position                0        1         2
--                                   1234567890123456789012345678
DECLARE @DATESTR AS NVARCHAR(254) = '12-MAR-15 04.07.36.000000000 PM'

SELECT CONVERT(DATETIME, 
    SUBSTRING(@DATESTR,  4, 3) + ' ' + -- mon
    SUBSTRING(@DATESTR,  1, 2) + ' ' + -- dd
    SUBSTRING(@DATESTR,  8, 2) + ' ' + -- yy
    SUBSTRING(@DATESTR, 11, 2) + ':' + -- hh
    SUBSTRING(@DATESTR, 14, 2) + ':' + -- mi
    SUBSTRING(@DATESTR, 17, 2) + ':' + -- ss
    SUBSTRING(@DATESTR, 20, 3) +       -- mmm
    RIGHT(@DATESTR, 2)                 -- am/pm
, 109) AS Converted

-- 2015-03-12 16:07:36.000

这可能会帮助你构建你的逻辑

SELECT  CAST(CONVERT(VARCHAR(9), LEFT('12-MAR-15 04.07.36.000000000 PM',9), 120) AS DATE) DATE_PART , 
CASE WHEN (RIGHT('12-MAR-15 04.07.36.000000000 PM', 2)='PM' AND Substring('12-MAR-15 04.07.36.000000000 PM',  11, 2) <> '12') 
    THEN Cast(Cast(Substring('12-MAR-15 04.07.36.000000000 PM', 11, 2) AS INT)+12 AS  CHAR(2)) 
 WHEN (RIGHT('12-MAR-15 04.07.36.000000000 PM', 2)='AM' AND Substring('12-MAR-15 04.07.36.000000000 PM', 11, 2)='12') 
    THEN '00'
 ELSE Substring('12-MAR-15 04.07.36.000000000 PM', 11, 2) END + ':' + Substring( '12-MAR-15 04.07.36.000000000 PM',  14, 2) TIME_PART

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM