将mm / dd / yyyy hh:mm; ss AM / PM转换为datetime

时间:2012-10-26 11:23:39

标签: sql-server-2008 datetime

当我尝试转换日期时,我遇到错误

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数据类型转换为日期时间数据类型会导致超出范围的值。

如何将varchar时间转换为datetime?

修改

基于我修改的答案..下面是我得到的实际日期时间..所以现在我能够得到注意,但最大日期不起作用

    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 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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)

注意:

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

额外注意

与Barry一样,我将103更改为101

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

答案 2 :(得分:1)

试试这个:更改:如上所述,我从103更改了日期格式类型101.

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), '-', '/')))

答案 3 :(得分: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