求助datediff命令的問題 在SQL查詢中,有兩個字段RQ和XCRQ,一個是varchar,長度是20;另一個是smalldatetime,長度是4。要求這兩個字段相差大於14個月的值,用datediff總是提示轉換出錯,怎麼辦? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 DATEDIFF ( datepart , startdate , enddate ) 有非日期吧过滤下and isdate(rq)=1 DATEDIFF(month, cast(RQ as date), cast(XCRQ as date)) declare @RQ varchar(20) = '2010-08-01 17:50:50'declare @XCRQ smalldatetime = getdate()select * from tb where DATEDIFF(m,@RQ,@XCRQ)>14 declare @RQ varchar(20) = '2010-08-01 17:50:50'declare @XCRQ smalldatetime = getdate()select * from tb where DATEDIFF(m,@RQ,@XCRQ)>14 declare @RQ varchar(20) = '2010-08-01 17:50:50'declare @XCRQ smalldatetime = getdate()select DATEDIFF(m,@RQ,@XCRQ) RQ 字段是varchar的,但是其数值输入的格式基本上都是YYYY-YY-YY的用and isdate(rq)=1 过滤前后数值一样我的命令是SELECT *FROM T_SBxx_JYXX_nbtjzxWHERE (DATEDIFF(m,XCRQ,RQ)>14) 我查了,两个字段中都没有空值 SELECT * FROM ( SELECT * FROM T_SBxx_JYXX_nbtjzx WHERE ISDATE(rq) = 1 ) tWHERE (DATEDIFF(m, XCRQ, RQ)>14) 这样呢? SELECT * FROM ( SELECT * FROM T_SBxx_JYXX_nbtjzx WHERE ISDATE(rq) = 1 ) tWHERE (DATEDIFF(m, XCRQ, RQ)>14) 这样呢? select *from T_SBxx_JYXX_nbtjzxwhere isdate(rq)=0--看看有没有数据 @xuam:直接用CAST轉換和不用CAST是一樣的,都顯示轉換出錯 @wufeng4552:查了,兩個字段都查了,沒有值 @htl258 您之前的方法用了,還是顯示轉換datetime時出錯 有沒有什麽方法可以將VARCHAR轉換成datetime的? 如果可以转换成日期型的,不用转默认会向DATETIME类型转换,楼主转换出错是什么错,发出来 服务器: 消息 241,级别 16,状态 1,行 1从字符串转换为 datetime 时发生语法错误。 命令改成這樣了select *from (select * from t_sbxx_jyxx_nbtjzx where isdate(XCRQ)=1 and isdate(RQ)=1)Twhere (datediff(mm,XCRQ,RQ)>14) 这很明显,你的那个字符型的,有一些肯定不能转成时间型select *from T_SBxx_JYXX_nbtjzxwhere isdate(rq)=0ISDATE确定输入表达式是否为有效的日期。语法ISDATE ( expression ) 参数expression一个表达式,将要验证它是否为一个日期。expression 是任何返回 varchar 数据类型的表达式。 返回类型int注释如果输入表达式是有效的日期,那么 ISDATE 返回 1;否则,返回 0。下表显示一组示例所得到的返回值。列值 (varchar) ISDATE 返回值 NULL 0 Abc 0 100、-100、100 a 或 100.00 0 .01 0 -100.1234e-123 0 .231e90 0 $100.12345、- $100.12345 或 $-1000.123 0 as100 或 1a00 0 1995-10-1、1/20/95、1995-10-1 12:00pm、Feb 7 1995 11:00pm、1995-10-1 或者 1/23/95 1 13/43/3425 或 1995-10-1a 0 $1000、$100 或 $100 a 0 表結構上,開頭說了RQ是varchar,長度是20;XCRQ是smalldatetime,長度是4。會不會這個有影響? 看看是哪一行数据报错:SELECT *, DATEDIFF(m,XCRQ,RQ)FROM T_SBxx_JYXX_nbtjzx @feilniu第一行就出錯了服务器: 消息 241,级别 16,状态 1,行 1从字符串转换为 datetime 时发生语法错误。 數據有兩萬多條啊,用isdate(RQ)=1限制后,還會有什麽樣情況可能導致轉換出錯? 問題已經解決,謝謝SQL77:)最終命令為select * from T_SBXX_JYXX_NBTJZX where datediff(mm,case when isdate(RQ)=0 then XCRQ else RQ END ,XCRQ)>14 sql server 查询 帮忙看看 sqlserver2000数据库导入oracle 9i数据库 列名无效 SQL求助 IT的问题 SQL Server如何写数据库日志? 请问高手,这个 sql 语句怎么写最好 如何约束ntext内的值 怎样从数据库中取出符合条件的最后一条记录 vfp9.0连sql server备注字段会出现乱码,100分求解决方法 我想看到一个数据库里所有的表及字段 数据库触发器、过程如何进行单元测试??? 全文索引问题
过滤下
and isdate(rq)=1
declare @XCRQ smalldatetime = getdate()select * from tb where DATEDIFF(m,@RQ,@XCRQ)>14
declare @XCRQ smalldatetime = getdate()select * from tb where DATEDIFF(m,@RQ,@XCRQ)>14
declare @XCRQ smalldatetime = getdate()select DATEDIFF(m,@RQ,@XCRQ)
用and isdate(rq)=1 过滤前后数值一样我的命令是SELECT *
FROM T_SBxx_JYXX_nbtjzx
WHERE (DATEDIFF(m,XCRQ,RQ)>14) 我查了,两个字段中都没有空值
FROM (
SELECT *
FROM T_SBxx_JYXX_nbtjzx
WHERE ISDATE(rq) = 1
) t
WHERE (DATEDIFF(m, XCRQ, RQ)>14) 这样呢?
FROM (
SELECT *
FROM T_SBxx_JYXX_nbtjzx
WHERE ISDATE(rq) = 1
) t
WHERE (DATEDIFF(m, XCRQ, RQ)>14) 这样呢?
from T_SBxx_JYXX_nbtjzx
where isdate(rq)=0
--看看有没有数据
直接用CAST轉換和不用CAST是一樣的,都顯示轉換出錯
查了,兩個字段都查了,沒有值
如果可以转换成日期型的,不用转默认会向DATETIME类型转换,楼主转换出错是什么错,发出来
从字符串转换为 datetime 时发生语法错误。
from (select * from t_sbxx_jyxx_nbtjzx where isdate(XCRQ)=1 and isdate(RQ)=1)T
where (datediff(mm,XCRQ,RQ)>14)
from T_SBxx_JYXX_nbtjzx
where isdate(rq)=0ISDATE
确定输入表达式是否为有效的日期。语法
ISDATE ( expression ) 参数
expression一个表达式,将要验证它是否为一个日期。expression 是任何返回 varchar 数据类型的表达式。 返回类型
int注释
如果输入表达式是有效的日期,那么 ISDATE 返回 1;否则,返回 0。下表显示一组示例所得到的返回值。列值 (varchar) ISDATE 返回值
NULL 0
Abc 0
100、-100、100 a 或 100.00 0
.01 0
-100.1234e-123 0
.231e90 0
$100.12345、- $100.12345 或 $-1000.123 0
as100 或 1a00 0
1995-10-1、1/20/95、1995-10-1 12:00pm、Feb 7 1995 11:00pm、1995-10-1 或者 1/23/95 1
13/43/3425 或 1995-10-1a 0
$1000、$100 或 $100 a 0
FROM T_SBxx_JYXX_nbtjzx
第一行就出錯了服务器: 消息 241,级别 16,状态 1,行 1
从字符串转换为 datetime 时发生语法错误。