日期:2014-05-19  浏览次数:20543 次

01JAN 02FEB 03OCT范围计算问题急!
数据
ID     FDATE
1       01JUN
2       02FEB
3       21JUN
4       03JAN
5       25NOV
6       30DEC
。。。。
要求查询出,01JAN-0JUN   的数据怎么做比较好!

------解决方案--------------------
cREATE TABLE MT(
ID INT , FDATE NVARCHAR(20))
INSERT INTO MT SELECT 1, '01JUN '
UNION SELECT 2, '02FEB '
UNION SELECT 3, '21JUN '
UNION SELECT 4, '03JAN '
UNION SELECT 5, '25NOV '
UNION SELECT 6, '30DEC '


declare @s nvarchar(20)
set @S= '01JAN '
declare @e nvarchar(20)
set @e= '01JUN '


SELECT ID ,FDATE FROM MT
where cONVERT(datetime, stuff(FDATE,3,0, ' ')+ ' 1900 ') between
cONVERT(datetime, stuff(@S,3,0, ' ')+ ' 1900 ') and cONVERT(datetime, stuff(@e,3,0, ' ')+ ' 1900 ')

ID FDATE
----------- --------------------
1 01JUN
2 02FEB
4 03JAN

(3 row(s) affected)


------解决方案--------------------
select cONVERT(datetime, stuff( '21JUN ',3,0, ' ')+ ' 1900 ')

从字符串转换为 datetime 时发生语法错误。

--为什么我这里出现语法错误的呢?

看了联机帮助
SQL Server 可以识别以下列格式括在单引号 ( ') 中的日期和时间:

字母日期格式(例如, 'April 15, 1998 ')
数字日期格式(例如, '4/15/1998 '、 'April 15,1998 ')
未分隔的字符串格式(例如 '19981207 '、 'December 12, 1998 ')
但是我用 'April 15,1998 '也会出错..