如何修改日期列值?

时间:2009-09-30 05:48:54

标签: sql sql-server tsql sql-server-2000

使用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,则应显示上一个日期。

如何查询此情况?

3 个答案:

答案 0 :(得分:1)

好的,我没有看到有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))

答案 1 :(得分:1)

试试这个怎么样

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

答案 2 :(得分:0)

显示有效日期非常简单:

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

马克