【问题标题】:SQL Server converting string to datetimeSQL Server 将字符串转换为日期时间
【发布时间】:2021-06-26 07:49:38
【问题描述】:

我正在使用 SQL 服务器,我需要将一段字符串转换为日期时间,但我收到了错误

将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。

到目前为止,这是我的代码导致问题

SELECT TOP (1) [stream]
    , convert(datetime, SUBSTRING(Stream, 12, 10), 103) as Date
FROM x
where .....

select *
from

当我将日期时间更改为 varchar 时,日期显示为“03/28/2021”

但是我需要它以“28/03/2021”的形式出现,我相信它才能正常工作

基本上只是切换我认为的月份和日期?

有什么想法吗?

【问题讨论】:

  • 传入流中日期的确切格式是什么?
  • 大家好,数据以 03/28/2021 流入。所以这就是为什么我将其显示为 varchar 作为默认值,我需要将其更改为 28/03/2021
  • @d_chawke Stream 包含什么?如果解析失败,那是因为日期 string 与样式不匹配。日期本身没有格式,它们是二进制值。如果CONVERT 成功,结果将没有格式。由客户端以一种或另一种方式显示 datetime
  • 首先不要使用varchars 作为日期和时间值。有 6 种日期和时间数据类型可供选择,它们要好得多。日期和时间数据类型也没有格式,由演示文稿选择它们出现的格式,不是 RDBMS。

标签: sql-server datetime substring converters


【解决方案1】:

这里没有足够的信息来给你一个准确的答案——我们不知道你到底输入了什么输入数据。

转换为 DateTime 的文档:

https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver15

具有各种日期时间格式 dd/mm/yyy 、 mm/dd/yyyy 等的语言环境代码(您传递 103)

找到适用于您正在尝试做的事情的那个。

您关于“超出范围值”的错误意味着您使用了错误的区域设置格式 - 超过 12 的 DAY 值(例如 28 日)被解释为 MONTH 值。由于日历中没有第 28 个月,因此会引发错误。

您传入的语言环境代码为 103 = 这是英式英语:dd/mm/yyyy 尝试用 mm/dd/yyyy 的 101 (en-US) 替换它

【讨论】:

  • 嗨@JimP76,是的,我必须使用 103 本地代码。但是它没有为我转换它,数据以“03/28/2021”的形式出现。但我需要交换日期和月份。我想通过输入日期时间和 103 代码它会为我做,但它似乎没有,因此错误
  • 03/28/20212 对 103 不友好。您需要将其更改为 101。103 告诉 SQL 将其解释为第 28 个月的第 3 天,采用英式英语 dd/mm/yyyy 格式
  • @d_chawke 冗长,这个答案是说使用 101 NOT 103 :) 你试图将它转换为日期,所以将样式设置为格式它在现在,然后你有一个没有格式的本地日期。
  • 太棒了!谢谢你们俩,效果很好,对不起,我是这方面的新手,但这对我来说是很好的学习。再次感谢!
【解决方案2】:

您需要告诉 SQL Server 传入的日期格式是什么。

发出set dateformat mdy,然后执行您的查询。

【讨论】:

  • 感谢您的反对。日期格式通常是导致日期时间错误的原因。很抱歉这个答案给您带来了问题。
  • 这不是 OP,当问题专门使用 convert + style 时,默认日期格式无关紧要,因为格式已指定。因此,这并不能回答问题。
【解决方案3】:

您可以使用try_convert 进行调试。它将显示 null 而不是错误:

SELECT TOP (1) [stream]
    , convert(datetime, SUBSTRING(Stream, 12, 10), 103) as Date
FROM x
where try_convert(datetime, SUBSTRING(Stream, 12, 10), 103)
  is null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 2015-02-12
    • 2019-04-12
    相关资源
    最近更新 更多