当前位置: 首页 > 面试题库 >

SQL中的IsDate函数将无效日期评估为有效日期

督宏旷
2023-03-14
问题内容

我正在针对从Excel文件导入的数据运行SQL语句。在此SQL中,我正在检查用户是否已使用IsDate函数正确输入了日期。由于这是尚未转换的原始数据,因此所有日期都存储在varchar数据类型字段中。

在某些情况下,如果用户输入的日期格式明显不正确,IsDate将返回1(有效日期)。

例如:

07/001/2012

2012-07-002

007/002/2012

关于如何处理此问题的任何建议?

SELECT *
  FROM tblImport
 WHERE (ISDATE(dt) = 0 
        AND (dt is not null AND dt <> ''))

谢谢!

ps Smacking用户没有帮助。


问题答案:

我做了很多数据转换工作,这是我创建的一个函数,几乎每天都会使用它来清除错误的日期:

CREATE FUNCTION dbo.fnCheckDate
(@InDate nvarchar(50))
RETURNS DATETIME
AS
    BEGIN
        declare @Return DATETIME

        select @return = CASE WHEN ISDATE(@InDate) = 1
                            THEN CASE WHEN CAST(@InDate as DATETIME) BETWEEN '1/1/1901 12:00:00 AM' AND '6/6/2079 12:00:00 AM'
                                    THEN @InDate
                                    ELSE null
                                    END
                            ELSE null
                            END
        return @return
    END
GO

结果:

SELECT dbo.fnCheckDate('07/001/2012') --> Returns 2012-07-01 00:00:00.000
SELECT dbo.fnCheckDate('2012-07-002') --> Returns 2012-07-01 00:00:00.000
SELECT dbo.fnCheckDate('007/002/2012') --> Returns 2012-07-01 00:00:00.000
SELECT dbo.fnCheckDate('00/002/2012') --> Returns Null
SELECT dbo.fnCheckDate('006/031/2012') --> Returns Null
SELECT dbo.fnCheckDate('') --> Returns Null


 类似资料:
  • 问题内容: 我有一列以()格式保存。我需要验证如果该月在30天内结束,那么没有报告损失日期为31的损失。我有数百万条记录。帮助将不胜感激。 查询应返回最后一个无效记录,因为200806在30天内结束。 问题答案: 对于您的特定问题,以下内容将返回错误的行: 根据您的输入界面,您可能需要重复31个月的几个月,以显示大于31的值。 2月有点棘手。逐步开始,确定超过29天的所有2月条目,您可以立即删除/

  • 问题内容: alert(new Date(‘2010-11-29’)); chrome,ff没问题,但是Safari会喊“无效日期”。为什么呢 编辑:好的,根据下面的评论,我使用了字符串解析并尝试了以下操作: 编辑 :似乎人们仍在这里着陆-今天,我将使用或完成此操作。Date-fns也非常轻巧。 问题答案: 该模式不是构造函数的官方支持格式。Firefox似乎支持它,但不要指望其他浏览器也这样做。

  • 我在Spring API的请求体中使用LocalDateTime。 当我在请求中输入无效日期时,例如“2020-02-31 00:00:00”,它会自动转换为“2020-02-29 00:00:00”。我想在无效日期的情况下抛出异常。官方留档中提到它会转换为以前的有效日期。

  • 我想验证用户输入的日期是否有效,格式是否正确。我使用这个块来检查用户的输入,但是当我输入一个无效的日期时,打印语句会给我奇怪的输出。 当是时,它打印

  • 问题内容: 我想说出JS中有效和无效日期对象之间的区别,但不知道如何: 有编写函数的想法吗? 建议使用Ash 来分析日期字符串,这为检查日期字符串是否有效提供了一种权威方法。 如果可能的话,我希望我的API接受Date实例,并能够检查/确认它是否有效。Borgar的解决方案可以做到这一点,但是我需要在浏览器中对其进行测试。我也想知道是否有更优雅的方法。 Ash使我考虑完全不让我的API接受实例,这

  • 我正在使用React-Datepicker和MomentJS。但是当我想使用Moment设置starDate时,该值在datepickerfield中给出无效日期。 当我在控制台中记录this.state.start日期时,控制台会显示以下内容:“开始日期: 27-11-2018”,格式为“DD-MM-YYYY”。此格式也用于DatePicker组件。 有人能解释一下为什么它在浏览器中显示无效日期