Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql server中单列中的不同日期格式_Sql_Sql Server_Database - Fatal编程技术网

sql server中单列中的不同日期格式

sql server中单列中的不同日期格式,sql,sql-server,database,Sql,Sql Server,Database,我正在使用SQL server。我们在表中有date列,但其中一些以不同的格式存储 例如:我们有格式为2015-12-09 00:00:12.000的记录,但有些记录的格式为2015/09/09 00:08:09.000或任何其他有效日期类型。 如何从表中识别具有不同日期格式的记录。 我尝试使用isdate()函数,但由于所有日期都有效,因此没有运气。 您能给我一点指导吗。既然日期存储为VARCHAR,而不是DATETIME(它们应该是这样的),那么实际上无法通过SQL来确定它。日期“2016-

我正在使用SQL server。我们在表中有
date
列,但其中一些以不同的格式存储

例如:我们有格式为
2015-12-09 00:00:12.000
的记录,但有些记录的格式为
2015/09/09 00:08:09.000
或任何其他有效日期类型。 如何从表中识别具有不同日期格式的记录。 我尝试使用
isdate()
函数,但由于所有日期都有效,因此没有运气。
您能给我一点指导吗。

既然日期存储为
VARCHAR
,而不是
DATETIME
(它们应该是这样的),那么实际上无法通过SQL来确定它。日期“2016-02-01”是2月1日还是1月2日?如果你说不出来,那么计算机代码是如何计算出来的呢


最好的方法是回顾在表中插入或更新数据的应用程序,并尝试找出它们可能使用了什么。如果用户只是输入数据,那么这不太可能有帮助,尽管您可以寻找一些一致性-Janice总是在MM/DD/YYYY输入数据,但Pierre总是将其作为DD/MM/YYYY输入,等等。这可能是缩小范围的最佳选择。否则,您可能会查看系统中的其他数据-例如,如果表中的列中也插入了一个,那么该日期和您的其他日期通常在几天之内,以此类推。

解决方案第1部分

尽管此解决方案可能无法完全解决您的问题,但如果您至少可以统一日期,使其看起来彼此相似,那么您的位置应该会得到很大改善,方法是将以下内容放在查询的顶部:

SET DATEFORMAT DMY
DECLARE @DateSeparator NVARCHAR(1) = '/'

范例

注意事项:

  • M表示月,D表示日,Y表示年

  • 设置DATEFORMAT会影响日期在结果集中的显示方式以及日期转换为VARCHAR和类似格式的方式

  • 如果不设置DATEFORMAT,则在不同的计算机/设置上运行相同的存储过程可能会产生不同的结果

解决方案第2部分

您还可以执行一些字符串操作,用您选择的字符替换-/

…将以下内容放在查询的顶部:

SET DATEFORMAT DMY
DECLARE @DateSeparator NVARCHAR(1) = '/'
…将以下内容用作select语句的一部分:

REPLACE(REPLACE([date], '/', @DateSeparator), '-', @DateSeparator)
范例

注意事项:

  • 在上面的示例中,日期分隔符设置为/,但将@DateSeparator的值更改为您选择的日期分隔符
两种解决方案结合使用

范例

注意事项:

  • 将[your_table]替换为源表的名称

是的,但DB由客户处理,insert由他们负责,我现在正试图纠正此问题:(需要明确的是,事实上type
varchar
中的
date
列不是
date
?@Utsav-Its-of-type-date…..我也在考虑转换date列,并找到“/”字符来标识带有“/”格式的日期,因为主要日期是以“-”格式提供的。我不确定SQL Server,日期存储在sam中如果是日期类型,则使用DB格式。视图中的差异可能是由于您的客户端设置造成的。您是否可以编辑您的问题并显示一些示例,说明您是如何通过同一客户端看到不同的日期格式的?这有点混乱。您可能有
varchar
列,而不是使用
like
来查找所需内容,或者您有
date
列,然后您就不会有格式问题。可能您不够具体。
REPLACE(REPLACE([date], '/', @DateSeparator), '-', @DateSeparator)
SELECT
    REPLACE(REPLACE(CONVERT(NVARCHAR(20), [date]), '/', @DateSeparator), '-', @DateSeparator) AS [date]
FROM
    [your_table]
SET DATEFORMAT YMD

SELECT
    REPLACE(REPLACE(CONVERT(NVARCHAR(20), [date]), '/', @DateSeparator), '-', @DateSeparator) AS [date]
FROM
    [your_table]