为什么提示“从字符串转换为datetime类型时发生语法错误”?

taozhiyi 2003-08-03 11:08:04
SELECT *
FROM (SELECT DateDiff(yyyy, 出生日期, GetDate()) AS yearAge
FROM 客户
WHERE IsDate(出生日期) = 1) tableA
WHERE (yearAge > 0)
注:其中tableA运行正常
...全文
48 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangye1211 2004-02-02
  • 打赏
  • 举报
回复
SQLServer 联机手册中不建议使用> < 和 !=
taozhiyi 2003-08-17
  • 打赏
  • 举报
回复
着急,没有办法,将源表的不符合日期时间格式的内容要么改为符合日期时间格式,要么清为Null,这下就通过了。
按说,有了Where IsDate(日期)=1 这个限制语句,不应该会出现转换的错误,挺奇怪的。
pengdali 2003-08-03
  • 打赏
  • 举报
回复
SELECT *
FROM (SELECT DateDiff(year,出生日期,GetDate()) AS yearAge
FROM 客户
WHERE IsDate(出生日期)=1) tableA
WHERE yearAge > 0
dotnba 2003-08-03
  • 打赏
  • 举报
回复
这样呢?
SELECT yearAge
FROM (SELECT DateDiff(yyyy, cast(出生日期 as datetime), GetDate()) AS yearAge
FROM 客户
WHERE IsDate(出生日期) = 1) tableA
WHERE (yearAge > 0)
taozhiyi 2003-08-03
  • 打赏
  • 举报
回复
仍然提示相同的错误,
提示:
如果去掉“where (yearAge>0)”则无出错提示了,而且tableA可以正常运行
dotnba 2003-08-03
  • 打赏
  • 举报
回复
SELECT *
FROM (SELECT DateDiff(yyyy, cast(出生日期 as datetime), GetDate()) AS yearAge
FROM 客户
WHERE IsDate(出生日期) = 1) tableA
WHERE (yearAge > 0)
qianguob 2003-08-03
  • 打赏
  • 举报
回复
可能吧。
taozhiyi 2003-08-03
  • 打赏
  • 举报
回复
太奇怪了,我把你的语句改成我的表名和字段名后,还是提示相同的错误内容。
大家说的语句我都试过,都提示相同错误,会不会错误不在语句本身?
zjcxc 2003-08-03
  • 打赏
  • 举报
回复
你的语句应该没错,在我的电脑上测试能正确运行

我用的是我自己的表,除了表名和字段名不同外,写法一致

SELECT *
FROM (SELECT DateDiff(yyyy, 凭证日期, GetDate()) AS yearAge
FROM 凭证库
WHERE IsDate(凭证日期) = 1) tableA
WHERE (yearAge > 0)

CrazyFor 2003-08-03
  • 打赏
  • 举报
回复
SELECT DateDiff(yyyy, convert(datetime,出生日期), GetDate()) AS yearAge
FROM 客户
WHERE IsDate(出生日期) = 1 and DateDiff(yyyy, convert(datetime,出生日期), GetDate()) >0
caiyunxia 2003-08-03
  • 打赏
  • 举报
回复
SELECT *
FROM (SELECT DateDiff(year,convert(datetime,出生日期),GetDate()) AS yearAge
FROM 客户
WHERE IsDate(出生日期)=1) tableA
WHERE yearAge > 0
taozhiyi 2003-08-03
  • 打赏
  • 举报
回复
仍然提示相同的错误,对了,列名为:出生日期的列,数据类型是文本
qianguob 2003-08-03
  • 打赏
  • 举报
回复
对了,上面的肯定可以了。
vchoushen6 2003-08-03
  • 打赏
  • 举报
回复
改为下面的保证不会有问题:

SELECT *
FROM (SELECT cast(DateDiff(year,出生日期,GetDate()) AS int) as yearAge
FROM 客户
WHERE IsDate(出生日期)=1) tableA
WHERE yearAge > 0

你出错的原因是类型不匹配的问题.

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧