etl 字符到日期

zhongqq 2010-11-10 02:34:08
需要把字符数据转换成日期数据, 比如‘20101010’ 到 date型。
转换可以有函数convert 但是我怎么判断这个字符数据是否可以转换成日期呢,比如'20000000', '111111' 怎么过滤掉这些不规则的数据,或者转换出措时代码处理一下。 业务数据不规则清理起来很麻烦,请大家帮忙!
...全文
223 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhongqq 2010-11-10
  • 打赏
  • 举报
回复
答案很好,我都想用try catch来解决了。
dawugui 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhongqingqiu 的回复:]
需要把字符数据转换成日期数据, 比如‘20101010’ 到 date型。
转换可以有函数convert 但是我怎么判断这个字符数据是否可以转换成日期呢,比如'20000000', '111111' 怎么过滤掉这些不规则的数据,或者转换出措时代码处理一下。 业务数据不规则清理起来很麻烦,请大家帮忙!
[/Quote]
ISDATE
确定输入表达式是否为有效的日期。

语法
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


示例
A. 使用 ISDATE 检查变量
下面的示例检查 @datestring 局部变量是否为有效的日期。

DECLARE @datestring varchar(8)
SET @datestring = '12/21/98'
SELECT ISDATE(@datestring)

下面是结果集:

-----------
1

B. 使用 ISDATE 检查列是否为有效的日期
下面的示例创建 test_dates 表,并且插入两个值。使用 ISDATE 以确定列中的值是否为日期。

USE tempdb
CREATE TABLE test_dates (Col_1 varchar(15), Col_2 datetime)
GO
INSERT INTO test_dates VALUES ('abc', 'July 13, 1998')
GO
SELECT ISDATE(Col_1) AS Col_1, ISDATE(Col_2) AS Col_2
FROM test_dates

下面是结果集:

Col_1 Col_2
----------------- --------------------
0 1

--小F-- 2010-11-10
  • 打赏
  • 举报
回复
cast col as datetime
--小F-- 2010-11-10
  • 打赏
  • 举报
回复
cast as datetime
nice_dream_li 2010-11-10
  • 打赏
  • 举报
回复

declare @s nvarchar(200)
SET @s = '20100105'
if ISDATE(@s) = 1
select convert(DATETIME ,@s)
else
select @s

budong0000 2010-11-10
  • 打赏
  • 举报
回复
declare @s nvarchar(200) = '20000'
if ISDATE(@s) = 1
select convert(date ,@s)
else
select @s

700

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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