使用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