使用SQL Server 2000中,日期列數據類型爲varchar ...如何修改日期列值?
在我的表日期列的值是這樣的:
2009/01/31
2009/02/00
2009/02/01....
2009/03/31
2009/04/00
2009/04/01.... so on...,
我想顯示2009/01/31,而不是2009/02/00,如果日期是2009/02/00,它應該顯示前一個日期。
如何查詢這種情況?
使用SQL Server 2000中,日期列數據類型爲varchar ...如何修改日期列值?
在我的表日期列的值是這樣的:
2009/01/31
2009/02/00
2009/02/01....
2009/03/31
2009/04/00
2009/04/01.... so on...,
我想顯示2009/01/31,而不是2009/02/00,如果日期是2009/02/00,它應該顯示前一個日期。
如何查詢這種情況?
如何嘗試這個
DECLARE @Table TABLE(
Val VARCHAR(10)
)
INSERT INTO @Table (Val) SELECT '2009/01/31'
INSERT INTO @Table (Val) SELECT '2009/02/00'
SELECT * FROM @Table
SELECT CAST(SUBSTRING(Val, 1, 8) + CASE WHEN SUBSTRING(Val, 9, 2) = '00' THEN '01' ELSE SUBSTRING(Val, 9, 2) END AS DATETIME) + CASE WHEN SUBSTRING(Val, 9, 2) = '00' THEN -1 ELSE 0 END
FROM @Table
檢查的最後一個字符是00,然後設置爲01,並添加-1
工作正常,只要「怪異無效」的日期總是以「00」結尾...... – 2009-09-30 07:37:20
是不是指定了什麼? – 2009-09-30 08:04:41
好的,我沒有看到日期爲00的日期部分。
我鞭打了這種蠻力的方式。
我確定有優化可以應用,但這應該給你一個出發點。
select dateadd(dd, -1, convert(datetime, case when substring(Reverse(@WeirdDate), 1, 2) = '00' then reverse('1' + substring(Reverse(@WeirdDate), 2, len(@WeirdDate) - 1)) else @WeirdDate end, 101))
替換列名的@WeirdDate,它似乎工作
declare @WeirdDate varchar(10)
set @WeirdDate = '2009/04/00'
select dateadd(dd, -1, convert(datetime, case when substring(Reverse(@WeirdDate), 1, 2) = '00' then reverse('1' + substring(Reverse(@WeirdDate), 2, len(@WeirdDate) - 1)) else @WeirdDate end, 101))
set @WeirdDate = '2009/04/03'
select dateadd(dd, -1, convert(datetime, case when substring(Reverse(@WeirdDate), 1, 2) = '00' then reverse('1' + substring(Reverse(@WeirdDate), 2, len(@WeirdDate) - 1)) else @WeirdDate end, 101))
set @WeirdDate = '2009/01/00'
select dateadd(dd, -1, convert(datetime, case when substring(Reverse(@WeirdDate), 1, 2) = '00' then reverse('1' + substring(Reverse(@WeirdDate), 2, len(@WeirdDate) - 1)) else @WeirdDate end, 101))
請你能幫我解決這個問題http://stackoverflow.com/questions/41254801/how-to-force-web-api-to-return-the-underlying-int-value-of-a-enum – eddy 2016-12-21 15:26:41
要顯示的有效日期是很容易的:
SELECT
CASE ISDATE(datecolumn)
WHEN 1 THEN CAST(datecolumn AS DATETIME)
ELSE NULL
END AS 'DateValue'
FROM
dbo.YourTable
但處理無效日期一樣'2009/02/00'是有點棘手.....
但既然你已經似乎有以前的日期(2009/01/31) - 共同你不只是無視日期?
SELECT
CAST(datecolumn AS DATETIME)
FROM
dbo.YourTable
WHERE
ISDATE(datecolumn) = 1
馬克
是存儲在該方式中CSV一個文本列? – gbn 2009-09-30 05:53:28