查询某时间段内的日期但是日期字段是varchar型

黉酃 2014-01-07 10:57:52
在表A中查询出字段‘a_time’在某时间断内的数据,

但是‘a_time’为varchar类型,并且数据形式参差不齐



select a_time  from A where a_time between '2012-1-01'and '2012-3-05' order by convert(datetime,a_time) desc


这样查出的结果如下:


也想过直接字符串中取出数字然后拼接比较。


IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULL
DROP FUNCTION DBO.GET_NUMBER2
GO
CREATE FUNCTION DBO.GET_NUMBER2(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
END
RETURN @S
END
GO

PRINT DBO.GET_NUMBER2()

不会遍历去取

有什么好的方法吗?
...全文
697 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
我在这儿等你 2014-01-09
  • 打赏
  • 举报
回复
根据你的日期类型,分别列出查询条件
taotie1225 2014-01-08
  • 打赏
  • 举报
回复
引用 3 楼 DBA_Huangzj 的回复:
isdate()是判断是否能转换成日期类型的函数,但是有些varchar是可以转换的,所以不一定有用。

--这种是不能转换日期型的
DECLARE @a VARCHAR(20)
SET @a='2013年1月8日'
SELECT ISDATE(@a)

/*
-----------
0

*/
如果你的存放结构只有上面两种,那么可以: select a_time from a where isdate(a_time)=1 union all SELECT RTRIM(REPLACE(REPLACE(REPLACE(a_time ,'年','-'),'月','-'),'日','')) from a where isdate(a_time)=0 这样处理,如果有多种类型,就多次union all 但是建议对插入、update进行check约束,保证数据格式的一致性
周全
發糞塗牆 2014-01-08
  • 打赏
  • 举报
回复
isdate()是判断是否能转换成日期类型的函数,但是有些varchar是可以转换的,所以不一定有用。

--这种是不能转换日期型的
DECLARE @a VARCHAR(20)
SET @a='2013年1月8日'
SELECT ISDATE(@a)

/*
-----------
0

*/
如果你的存放结构只有上面两种,那么可以: select a_time from a where isdate(a_time)=1 union all SELECT RTRIM(REPLACE(REPLACE(REPLACE(a_time ,'年','-'),'月','-'),'日','')) from a where isdate(a_time)=0 这样处理,如果有多种类型,就多次union all 但是建议对插入、update进行check约束,保证数据格式的一致性
taotie1225 2014-01-07
  • 打赏
  • 举报
回复
有个判断是否为日期的函数
Zemo 2014-01-07
  • 打赏
  • 举报
回复
不懂,学习一下

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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