SQL - 将 varchar (dd/mm/yyyy hh.mm AM/PM) 转换为日期时间
Posted
技术标签:
【中文标题】SQL - 将 varchar (dd/mm/yyyy hh.mm AM/PM) 转换为日期时间【英文标题】:SQL - Convert varchar (dd/mm/yyyy hh.mm AM/PM) to datetime 【发布时间】:2015-09-07 07:52:01 【问题描述】:我正在尝试将 varchar 字段转换为日期时间。 varchar 字段中的数据看起来像这样dd/mm/yyyy hh.mm AM/PM
。
我实际上是在尝试提取日期部分和时间部分并将它们分别转换为日期和时间。
我使用以下查询从 varchar 中提取日期部分并将其转换为日期。
SELECT DISTINCT LEFT([Start Date], 10)
,CASE WHEN ISDATE(LEFT([Start Date], 10)) = 1
THEN CONVERT(DATETIME, LEFT([Start Date], 10), 120)
END
,ISDATE(LEFT([Start Date], 10))
FROM [dbo].[TestTable]
我在整个 8 月都有上述格式的时间戳。
但查询以yyyy-dd-mm
格式为我提供了结果,并且日期仅在 2015 年 8 月 12 日之前转换为日期格式。 8 月 12 日之后的日期为空。我知道这是因为在 case 语句中它们返回 0。我怎样才能将这些值也转换为日期?
任何将所有值转换为yyyy-mm-dd hh:mm:ss
的建议都会非常有帮助。
提前致谢。
【问题讨论】:
如果它在 8 月 12 日之后失败,则表明它的转换错误,并将天解释为月,将月解释为天。由于没有第 13 个月,这就是它失败的原因。 使用SET DATEFORMAT YMD
, example
@Damien_The_Unbeliever - 是的,就是这样。有什么解决办法吗?
@lad2025 - 谢谢,这很简单。我使用了FORMAT()
并将日期转换为yyyy-mm-dd
格式,但是是否有解决方案可以将2015 年8 月12 日之后的日期转换为实际日期?
@UnknownUser 在进行转换之前设置正确的 DATEFORMAT 它将起作用。
【参考方案1】:
您可以按照 lad2025 的建议使用 SET DATEFORMAT
。
SET DATEFORMAT dmy
或者您可以在CONVERT()
中使用以下内容
DECLARE @date VARCHAR(16) = '13/08/2015 11:13';
SELECT CONVERT(DATETIME, @date, 103)
103 is the code for dd/mm/yyyy.
【讨论】:
最后定义的代码指定了我们需要哪种格式的日期?还是日期的当前格式? 在您的问题中,您是说您使用dd/mm/yyyy
格式。这应该与格式 103 匹配。对于我的示例,格式应该与存储在 @date 中的内容匹配,或者在您的代码中匹配存储在 [Start Date]
中的内容。
样式编号 103 确实将 dd/mm/yyyy hh:mm AM/PM 转换为日期时间。见sqlfiddle.com/#!6/5d925/1
@JodyT - 非常感谢。它确实帮助了我。还有@Used_By_Already - 也谢谢你,我的时间格式是 hh.mm AM/PM
但我使用了替换功能并将.
替换为:
并使用了JodyT 给出的功能,现在我得到了我想要的格式的结果。非常感谢。
我错过了他的时期(而不是冒号) - 对不起。但是您的替换显然解决了这个问题-做得好。以上是关于SQL - 将 varchar (dd/mm/yyyy hh.mm AM/PM) 转换为日期时间的主要内容,如果未能解决你的问题,请参考以下文章
JXDatePicker 使用 SimpleDateFormat 将 dd.MM.yy 格式化为当前世纪的 dd.MM.yyyy