当我尝试转换日期时,我遇到错误
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
答案 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