0.第一步:创建视图V_dangyuan_3:
select id,姓名,加入党组织日期,所在党委,所在党支部,
case
when year(getdate())-year(出生日期) between 0 and 30 then 'F:0 岁 ~ 30岁'
when year(getdate())-year(出生日期) between 31 and 35 then 'G:31岁 ~ 35岁'
when year(getdate())-year(出生日期) between 36 and 40 then 'H:36岁 ~ 40岁'
when year(getdate())-year(出生日期) between 41 and 45 then 'I:41岁 ~ 45岁'
when year(getdate())-year(出生日期) between 46 and 50 then 'J:46岁 ~ 50岁'
when year(getdate())-year(出生日期) between 51 and 55 then 'K:51岁 ~ 55岁'
when year(getdate())-year(出生日期) between 55 and 60 then 'L:55岁 ~ 60岁'
when year(getdate())-year(出生日期) between 61 and 65 then 'M:61岁 ~ 65岁'
when year(getdate())-year(出生日期) between 65 and 70 then 'N:65岁 ~ 70岁'
when year(getdate())-year(出生日期) between 71 and 99 then 'O:71岁 -岁'
end as 分类
FROM dangyuan
where isdate(出生日期)=1
1.第一步:查询执行成功。
2
.第二步:执行失败
。
为什么?从字符串转换日期和/或时间时,转换失败?
3.答案
:视图的case语句需要再嵌套一层。仅仅在where部分限制条件还不够。
由于原始数据存在异常,通过where条件过滤。MSSQL仍然认为存在。
case isdate(出生日期) when 1 then
case 。。。
开发人员有
时
候使用类似下面
SQL
将
字符串
转换
为
日期
时间
类型,乍一看,这样的
SQL
的写法是没有什么问题的。但是这样的
SQL
其实有
时
候就是一个定
时
炸弹,随
时
可能出现问题(),下面简单对这种情况进行一个简单概括。
SELECT CONVERT(DATETIME, '2020-01-13 6:46:42');
如果你将连接
数据库
的登录名的默认语言修改为Aribc,然后去执行上面
SQL
语句,就会遇到错误,为什么呢?
为什么上面
SQL
的
日期
转换
出错了呢?其实是因为登录名修改默认语言后,会话对应的date_format变化了,从mdy变成了dmy,所以上面
转换
就报错了,有
时
候不报错,但是可能
转换
成一个错
你可以使用TRY_CONVERT函数来尝试将
字符串
转换
为
日期
或
时间
格式,如果
转换
失败
,则返回NULL。然后你可以使用IS NOT NULL来过滤掉这些NULL值。出现这个错误是因为你在
SQL
Server中尝试将一个无效的
字符串
转换
为
日期
或
时间
格式。如果你想要更细致的控制,可以使用TRY_CAST或TRY_PARSE函数来尝试将
字符串
转换
为特定的数据类型。这些函数可以帮助你处理不同的
日期
和
时间
格式,以及不同的语言和区域设置。这将返回所有可以成功
转换
为
日期
格式的行,而过滤掉那些无法
转换
的行。
楼主最近遇到了困扰2小
时
的问题,如下:
是数据迁移,从my
sql
到
sql
server
时
,会报’从
字符串
转换
日期
和/或
时间
时
,
转换
失败
’。网上查了很多方法 都不行。
最后发现是数据扥问题,也就是说my
sql
可以认0000-00-00 00:00:00的这个
时间
数据而
sql
server无法识别,所以会报错。因为不是合法有效的数据,只要将其改为合法数据即可
Microsoft
SQL
Server Developer Edition (64-bit)
Microsoft
SQL
Server Enterprise Edition (64-bit)
企业版的报错 : 查询 top(100
问题描述:
SQL
Exception: com.microsoft.
sql
server.jdbc.
SQL
ServerException: 从
字符串
转换
日期
和/或
时间
时
,
转换
失败
。 Msg 241, Level 16, State 1, 从
字符串
转换
日期
和/或
时间
时
,
转换
失败
。
问题分析:
1、在
SQL
Server中datetime类型的值跟varchar类型的值比较,会将varchar类型的值先转为datetime类型,这样会报错。
select * from t_users where 1=1
1、更改查询条件
时间
格式
select count(1) from table where field= '1' and field> '2021-04-01 00:00:00' and field< '2021-05-01 00:00:00'
#更改之后
select count(1) from table where field= '1' and field> '2021-04-01 00:00:00' and field< '2021/05/01 00:00:00'
今天生成环境出现了一个问题,在使用UNION联合查询两个订单表的
时
候,老是提示: 从
字符串
转换
日期
和/或
时间
时
,
转换
失败
,然后看了一下数据,没有问题啊,所有的
时间
都是有数据并且格式十分正确。
在执行插入
sql
的
时
候报错:[
SQL
Server]从
字符串
转换
日期
和/或
时间
时
,
转换
失败
。(241),查看了表字段,插入值均是正常的,又查看了不为空字段也是正常的,datatime字段也都正常,但就一直报错,在排除故障中,尝试把所有datatiem字段都删除,这个可以为空的datatime字段不能删除。就尝试添加该字段,就OK了。也不知道是什么原因。有大佬看到,麻烦指点一二。后来发现有一个datatime字段是可为空的,在插入语句中添加该字段后,发现正常,
sql
server中拼接
字符串
时
,需要把datetime型转化为char型才能进行拼接。与int转char类型不同,其需要多加引号:
declare @Dtime datetime
set @Dtime = '2020-03-05 14:16:36'
select 'INSERT into table1(pointID) VALUES ('+@Dtime+');'
错误提示:从
字符串
转换
日期
和/或
时间
时
,
转换
失败
。 (241)
解决方法:
外多加个引号
declare @Dtime da