当前位置: 首页 > 知识库问答 >
问题:

如何转换为varchar列到列处于混合模式的日期时间

盖夕
2023-03-14

我在sql server 2012中有一个专栏。该列的日期存储在varchar中。日期数据如下所示:dd/mm/yyyy

然而,有一个陷阱。列中的数据处于拒绝转换状态。详细调查显示,一些可转换为日期模式,而另一些则不能(可能是由于日期存储为文本模式)。我试图以日期格式上传数据。但它也拒绝这样做。

样本数据:

Original    Validation Check
10/03/1974  3/10/1974
02/02/1990  2/2/1990
16/05/1988  NULL

那我该怎么办?

PS:发现该列中存储的某些数据不是日期格式,因此拒绝转换。多亏了@DigvijayVerma先生,他正确地预测了这一点,在他的帮助下,我发现了错误。只有删除这些错误并用有效日期替换这些错误,才能达到目的。

你好,萨达特

共有3个答案

阎咏思
2023-03-14

如果日期是dd/mm/yyyy格式,请尝试

set dateformat dmy
select try_convert(datetime,date_col) from table

所有其他格式将显示为空

鲁博瀚
2023-03-14

数据库中的日期格式(日/月/年)为103。

所以你应该试试

SELECT convert(datetime, '31/10/2013', 103)

根据您的说明,您似乎需要yyyy-mm-dd格式的数据。所以请尝试下面的内容。

SELECT convert(varchar(max),(convert(datetime, '31/10/2013', 103)), 120)
商飞龙
2023-03-14

根据您的评论,由于您对列中的字符串格式(dd/mm/yyyy)很确定,我怀疑您的问题可能是由于前导/尾随空格造成的。

使用Ltrim()、Rtrim()和Isdate()函数尝试此操作。如果您在convertedDate字段中获得1900年1月1日(假设该日期不在您的字段中)的任何日期,那么您遇到的麻烦比空格还多:

Select Original,
       Case when IsDate(Ltrim(Rtrim(Original))) = 1
            then Convert(date, Ltrim(Rtrim(Original)), 103)
            else Convert(date, '19000101', 112) --date in yyyymmdd format
       End ConvertedDate,
From yourTable

 类似资料:
  • 我将客户数据转换成DB表,其中Varchar列类型中的几个单元格值包含date,而不包含date。包含特定格式的日期的文件需要转换为另一个文件,以便进一步用于数据分析作业。我尝试了下面的查询,但它显示了没有日期的单元格的错误。我如何解决这个问题? 基本上,我想去掉实际时间,加上000000来代替实际时间和日期。 查询: 错误: 代码:1292截断了不正确的日期时间值:“EVN”

  • 问题内容: 我在mySQL 5.1中有一个数据类型的日期列。如何将其转换为DATE? 这是我到目前为止所拥有的- 得到这个 错误-#1064-您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册以获取正确的语法,以在’FROM 7 FOR 4附近使用) 请帮忙。 问题答案: 您可以使用MySQL的功能 尽管我怀疑您使用Unix时间戳会更轻松

  • 我正在处理一个带有列“到期日期”的表,作为所有数据格式为DD/MM/YYYY的varchar。 表的创建者在此到期日期列中使用了错误的类型,现在客户端需要过滤并显示当前日期之前和之后的所有记录作为时间。这意味着需要将类型更改为date或datetime类型才能使用CURDATE()函数。 但是,值的当前格式不满足并且不允许类型更改,除非格式更改为YYYY-MM-DD(或类似)。 是否有任何方法可以

  • 问题内容: 我需要将1/9/2011的varchar值转换为mySQL中的日期,并且只需要月份和年份。这样我就可以使用该功能(因此,我需要将以上内容转换为201101)。 我已经尝试过使用函数的各种方式: 但是我得到了奇怪的结果…(例如:2009-01-00) 我做错了什么? 问题答案: 要么 很难从你的例子中看出

  • 我在redshift表中有一个varchar列,其中时间以24小时格式存储,例如,我想查询该表并将格式转换为12小时格式,显示时间为上午或下午。当我测试like时,它工作得很好,但是当我用列名代替查询表的硬编码值时, 它不会工作,给出一个错误

  • 问题内容: 是具有值“ true”和“ false”的列。我需要将其转换为位列。 当我尝试这样做时: 它显示一个错误 问题答案: 我怀疑在字段“ Flag1”中除了“ true”和“ false”以外还有其他值。因此,请检查Flag1中的值。 从YouTable中选择不同的Flag1。 这是我的证明: 它工作正常。 但是,这将产生相同的错误。 ->消息245,级别16,状态1,第2行,将varch