【问题标题】:How to set value on varchar to datetime variable [duplicate]如何将varchar上的值设置为日期时间变量[重复]
【发布时间】:2014-11-13 16:21:00
【问题描述】:

我有两个变量,一个是varchar,另一个是datetime。我需要将varchar 转换为datetime

declare @startdate as varchar(10)= '1/1/2013 1:60AM'
declare @enddate as varchar(10)= '1/1/2014 1:60AM'
declare @startdTime datetime

set @ startdTime =cast(@startdate as datetime)

然而,这种转换会导致错误:

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

如何正确转换?我在stackoverflow 上看到了几个示例,但未能获得解决方案,需要有关此问题的帮助。

如果有任何疑问请询问,提前谢谢

【问题讨论】:

  • 首先你认为 varchar(10) 是否正确保存 15 长度的字符串?
  • almas shaikh 感谢您的回复,而不是 varchar(10) 我使用 varchar(max) 但得到同样的错误。
  • 如果您从一开始就将@startdate@enddate 声明为DATE,您甚至不需要转换任何内容.....请:始终使用最合适的数据类型!如果您正在处理日期 - 使用 DATE(而不是 VARCHAR(10)

标签: sql sql-server tsql


【解决方案1】:

输入字符串 1:60AM1:06AM

的问题
declare @startdate as varchar(20)= '1/1/2013 1:06AM'
declare @enddate as varchar(20)= '1/1/2014 1:06AM'
declare @startdTime datetime

SELECT CONVERT( VARCHAR(20), @startdate ,101) 
SELECT CAST(CONVERT( VARCHAR(30), @startdate ,101) AS DATETIME)

【讨论】:

    【解决方案2】:

    确定时间。现在是上午 1.60 吗

    declare @startdate as varchar(50)= '01/01/2013 1:00 AM'
    declare @enddate as varchar(50)= '01/01/2014 1:00 AM'
    declare @startdTime datetime
    
    set @startdTime =cast(@startdate as datetime)
    print @startdTime
    

    【讨论】:

      【解决方案3】:

      这里 '1/1/2013 01:60 AM' 超过 10 个字符。将其增加到 20 或更多

      喜欢

      @startdate AS VARCHAR(25)
      @enddate AS VARCHAR(25)
      

      N:B:

       There is nothing like '1:60 AM',Make it "2:00 AM" or "1:06 AM" 
      

      【讨论】:

      • Anik Islam Abhi,感谢您的回复。我使用 varchar(max) 而不是 varchar(10) 但得到相同的错误。
      • 为什么我的回答被否决了??有什么问题?
      【解决方案4】:

      MS SQL 的不同类型的日期时间格式

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-17
        • 2017-07-05
        相关资源
        最近更新 更多