-1

当我尝试转换日期时,出现以下错误

DECLARE @MinLogDate AS varchar(100)
DECLARE @MinDate AS DATETIME

SET @MinLogDate = '10/26/2012 01:23:90 AM'
SET @MinDate = (SELECT CONVERT(CHAR(10), CONVERT(datetime, @MinLogDate,103),101))

错误:

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

如何将 varchar 时间转换为日期时间?

编辑

根据我修改的答案..下面是我得到的实际日期时间..所以现在我可以得到头脑,但最大日期不起作用

    DECLARE @MinDate AS DATETIME
    DECLARE @MaxDate AS DATETIME
    DECLARE @MinLogDate AS varchar(100)
    DECLARE @MaxLogDate AS varchar(100)

    SET @MinLogDate = '8/1/2012 01:00:00 AM'
    SET @MaxLogDate = '8/31/2012 01:00:00 PM'

    SET @MinDate = CONVERT(datetime, LEFT(@MinLogDate, 10), 101)
    SET @MaxDate = CONVERT(datetime, LEFT(@MaxLogDate, 10), 101)

    SELECT @MinDate
    SELECT @MaxDate
4

4 回答 4

1

首先103是英国/法国dd/mm/yyyy,你似乎是从美国转换过来的mm/dd/yyyy,应该是101

CHAR(10)您的代码中判断 - 您只是在寻找日期部分吗?如果是这样,那么这应该足够了:

SET @MinDate = CONVERT(datetime, LEFT(@MinLogDate, 10), 101)

更新:

除了您更新的问题,这现在应该可以解决问题:

SET @MinDate = CONVERT(datetime, LEFT(@MinLogDate, CHARINDEX(' ', @MinLogDate)), 101)
SET @MaxDate = CONVERT(datetime, LEFT(@MaxLogDate, CHARINDEX(' ', @MaxLogDate)), 101)
于 2012-10-26T11:41:51.040 回答
1

涵盖的时间和日期。

将它们分解为组成元素。

DECLARE @MinLogDate AS varchar(100)
DECLARE @MinDate AS DATETIME
SET @MinLogDate = '10/26/2012 01:23:30 AM'


DECLARE @minLD varchar(16) 
DECLARE @minLT varchar(16) 

-- In response to user's comment
SET @minLD = LEFT(@MinLogDate,CHARINDEX(' ',@MinLogDate));
SET @minLT = RIGHT( @MinLogDate, LEN(@MinLogDate) - CHARINDEX(' ', @MinLogDate));

SELECT @MinDate = CONVERT(datetime, @minLD, 101) + CONVERT(time, @minLT)

笔记:

在继续之前,我将您的时间字符串更改为有效时间字符串:)

额外说明

和巴里一样,我改成103101.

编辑:回应不断变化的问题:D

于 2012-10-26T11:50:57.367 回答
1

试试这个:更改:如上答案我将日期格式类型 101 从 103 更改。

DECLARE @MinLogDate AS varchar(100)
DECLARE @MinDate AS DATETIME

SET @MinLogDate = '10/26/2012 01:23:10 AM'
SET @MinDate = (SELECT CONVERT(CHAR(10), Replace(CONVERT(VARCHAR(20), Cast(@MinLogDate AS DATETIME), 101), '-', '/')))
于 2012-10-26T12:19:27.117 回答
0

以下是我过去使用的所有格式:

    select CONVERT(VARCHAR(19),GETDATE())
    select CONVERT(VARCHAR(10),GETDATE(),10)
    select CONVERT(VARCHAR(10),GETDATE(),110)
    select CONVERT(VARCHAR(11),GETDATE(),6)
    select CONVERT(VARCHAR(11),GETDATE(),106)
    select CONVERT(VARCHAR(24),GETDATE(),113)
    select CONVERT(VARCHAR(10),GETDATE(),101)
    select CONVERT(VARCHAR(10),CAST(GETDATE() AS DATE), 101)
    select CONVERT(VARCHAR(8), GETDATE(), 1) 
    select CONVERT(VARCHAR(10), GETDATE(), 101) 
    select CONVERT(VARCHAR(8), GETDATE(), 10) 
    select CONVERT(VARCHAR(10), GETDATE(), 110) 
    select CONVERT(VARCHAR(23), GETDATE(), 121)
    select CONVERT(varchar(23), getdate()+0.20, 121)
    select CONVERT(varchar(23), getdate()+0.20, 21)
    select CONVERT(varchar(23), getdate()+0.20, 20)
    select CONVERT(varchar(23), getdate()+0.20, 120)
    select convert(varchar (10),CONVERT(varchar(23), getdate(), 120),110)

    select datediff(week, dateadd(week, datediff(week, 0, dateadd(month, datediff(month, 0, getdate()), 0)), 0), getdate() - 1) + 1 ----- this shows the week of month - which week today's date is in the current month

    SELECT CONVERT(VARCHAR(10), GETDATE(), 101) + ' ' + CONVERT(VARCHAR(8), GETDATE(), 108)-- format is mm/dd/yyyy hh:mm:ss

    select CONVERT(VARCHAR(10), GETDATE(), 101) + ' ' + SUBSTRING( convert(varchar, getdate(),108),1,5)-- format is mm/dd/yyyy hh:mm

    select convert(varchar(10), GETDATE(), 101) + stuff(right(convert(varchar(26),GETDATE(),109 ),15 ),7,7,' ')-- format is mm/dd/yyyy hh:mm AM/PM
    SELECT CONVERT(VARCHAR(10),GETDATE(),101) +' '+ SUBSTRING(CONVERT(VARCHAR(20), GETDATE(), 9), 13, 5) + ' ' + SUBSTRING(CONVERT(VARCHAR(30), GETDATE(), 9), 25, 2)-- format is mm/dd/yyyy hh:mm AM/PM



    select convert(varchar(10), GETDATE(), 101) + right(convert(varchar(32),GETDATE(),100),8)
    select CONVERT(VARCHAR(10), GETDATE(), 101) + ' ' + RIGHT(CONVERT(VARCHAR, GETDATE(), 100), 7)
    select convert(varchar,getDate(),120)
    select convert(varchar(10),getDate(),120)



    SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM
    SELECT convert(varchar, getdate(), 101) -- mm/dd/yyyy 
    SELECT convert(varchar, getdate(), 102) -- yyyy.mm.dd 
    SELECT convert(varchar, getdate(), 103) -- dd/mm/yyyy
    SELECT convert(varchar, getdate(), 104) -- dd.mm.yyyy
    SELECT convert(varchar, getdate(), 105) -- dd-mm-yyyy
    SELECT convert(varchar, getdate(), 106) -- dd mon yyyy
    SELECT convert(varchar, getdate(), 107) -- mon dd, yyyy
    SELECT convert(varchar, getdate(), 108) -- hh:mm:ss
    SELECT convert(varchar, getdate(), 109) -- mon dd yyyy hh:mm:ss:mmmAM (or PM)
    SELECT convert(varchar, getdate(), 110) -- mm-dd-yyyy
    SELECT convert(varchar, getdate(), 111) -- yyyy/mm/dd
    SELECT convert(varchar, getdate(), 112) -- yyyymmdd
    SELECT convert(varchar, getdate(), 113) -- dd mon yyyy hh:mm:ss:mmm
    SELECT convert(varchar, getdate(), 114) -- hh:mm:ss:mmm(24h)
    SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h)
    SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm
    SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm
于 2017-08-03T17:08:40.907 回答