首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Server中查找导致类型转换中的错误的行

在Server中查找导致类型转换中的错误的行
EN

Stack Overflow用户
提问于 2015-02-23 19:31:05
回答 2查看 11K关注 0票数 3

我正在尝试将一个列转换为来自smalldatetimevarchar。有一些行包含错误,我如何找到它们?

代码语言:javascript
复制
SELECT 
    PA.EAR_TAG 
    ,ISNULL(B.DISPOSAL_DATE, H.DISPOSAL_DATE) as HB_Date
    ,Y.[DATE OF MOVEMENT] as Y_Date
    ,DATEDIFF(DAY, ISNULL(B.DISPOSAL_DATE, H.DISPOSAL_DATE), cast(Y.[DATE OF MOVEMENT] as smalldatetime))
FROM
    DairyTelomere.dbo.PROJECT_ANIMALS AS PA
LEFT JOIN 
    Langhill.dbo.YOUNG_STOCK_BULL AS B ON Pa.EAR_TAG = B.EAR_TAG
LEFT JOIN      
    Langhill.dbo.YOUNG_STOCK_HEIFER AS H ON PA.EAR_TAG = H.EAR_TAG
LEFT JOIN      
    DairyTelomere.dbo.Young_Stock_culls AS Y ON PA.EAR_TAG = Y.Ear_Tag

我得到的错误是:

Msg 242,第16级,第3状态,第1行 将varchar数据类型转换为小时间数据类型会导致超出范围的值。

我知道,如果列是日期格式,我可以使用ISDATE()检查它,但不幸的是,我不能更改列类型(没有权限)。

任何想法都将受到极大的赞赏。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-23 19:36:16

您可以使用伊萨特获取所有不为您进行转换的列表。您不需要更改列类型来使用它,所以我对您的声明感到困惑。

如果列是日期格式,我可以使用ISDATE()检查它,但不幸的是,我不能更改列类型(不具有权限)

如果您可以澄清,则会有更多帮助,但此查询应该会为您提供一个日期值错误的行的列表。

代码语言:javascript
复制
select table.date_as_varchar
from table
where isdate(table.date_as_varchar) = 0
票数 8
EN

Stack Overflow用户

发布于 2018-02-06 15:51:04

添加到@workabyte应答时,您还可以尝试使用TRY_PARSETRY_CASTTRY_CONVERT,如果转换失败,它们都会返回NULL,这样您就可以知道是哪些行导致了错误。

TRY_PARSE

正如文档所说:

仅在将字符串转换为日期/时间和数字类型时使用TRY_PARSE。对于一般类型转换,请继续使用强制转换或转换。请记住,在解析字符串值时存在一定的性能开销。

使用示例:

代码语言:javascript
复制
SELECT TRY_PARSE(your_date  AS DATETIME USING 'es-ES') as date
FROM your_table

es-ES是一个区域性参数,不同的区域性参数在转换中产生不同的结果,您可以在文档中找到完整的参数列表。

TRY_CONVERT

正如文档所说:

TRY_CONVERT接受传递给它的值,并尝试将其转换为指定的data_type。如果转换成功,TRY_CONVERT将作为指定的data_type返回值;如果发生错误,则返回null。但是,如果您请求的转换是显式不允许的,那么TRY_CONVERT就会出现错误。

使用示例:

代码语言:javascript
复制
SELECT TRY_CONVERT(DATETIME,your_date,103) as date
FROM your_table

103是转换日期的样式/格式,这里可以找到格式的列表。

TRY_CAST

正如文档所说:

TRY_CAST接受传递给它的值,并尝试将其转换为指定的data_type。如果转换成功,TRY_CAST将作为指定的data_type返回值;如果发生错误,则返回null。但是,如果您请求的转换是显式不允许的,那么TRY_CAST就会出现错误。

使用示例:

代码语言:javascript
复制
SELECT TRY_CAST(your_date AS DATETIME) as date
FROM your_table
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28681816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档