34,838
社区成员




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()
--这种是不能转换日期型的
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约束,保证数据格式的一致性