首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server转换‘dd/MM/YYYY H:mm:ss P.m.’到日期时间

SQL Server转换‘dd/MM/YYYY H:mm:ss P.m.’到日期时间
EN

Stack Overflow用户
提问于 2017-05-12 04:16:58
回答 2查看 1.3K关注 0票数 0

我正在将文本列导入Server 2008数据库。

我有一个字段“身体”,格式如下

'11/05/2017‘9:18:46

'10/05/2017‘1:08:27

等等。如何将其转换为适当的Server 2008日期时间(24小时)列?

我似乎找不到合适的解决办法。

我想要的结果是

'11/05/2017‘9:18:46改划为2017-05-11 09:18:46.000

'10/05/2017‘1:08:27改划为2017-05-10 13:08:27.000

提前谢谢。

到目前为止,我尝试过的是:去掉专栏中的日期部分。

代码语言:javascript
复制
select  convert(date, convert(varchar(10),carcass_date)) as carcassdate

这就是我一直在为时间而奋斗的简单的part..But。

谢谢你提前帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-12 04:31:41

问题在于字符串中的句点。通过删除它们,可以将字符串转换为日期时间。例如:

代码语言:javascript
复制
SELECT CAST(REPLACE(carcass_date, '.', '') AS DATETIME)
票数 1
EN

Stack Overflow用户

发布于 2017-05-12 04:47:31

当涉及到日期转换时,我建议您始终明确。

任何类型的编程,如果没有明确的日期格式,都会引发bug。

我建议您不要使用cast,因为没有明确的格式。尽管它总是采用ISO格式,但我从未发现任何关于它如何决定其他格式的信息(包括您的非ISO格式)。

不要使用没有格式号的convert

我建议您使用格式编号的convert。在我的系统中,这将返回两个不同的日期。强制转换返回错误的.

代码语言:javascript
复制
DECLARE @D AS VARCHAR(100) = '05/11/2017 9:18:46 a.m.'

SELECT CONVERT(DATETIME, REPLACE(@D, '.', ''), 103) as converted

SELECT CAST(REPLACE(@D, '.', '') AS DATETIME) as casted

数字103被定义为dd/mm/yyyy格式。至少这样你就有了某种程度的自我文档--这就是你所期望的格式

稍后版本的SQL有parse,但它使用区域性,而不是格式字符串。

也许读一下这个

https://www.simple-talk.com/sql/t-sql-programming/how-to-get-sql-server-dates-and-times-horribly-wrong/

这里还有一个非决定性的讨论:

datetime Cast or Convert?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43929197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档