如何在 SQL Select 语句中将文本字段更改为日期字段

Posted

技术标签:

【中文标题】如何在 SQL Select 语句中将文本字段更改为日期字段【英文标题】:How to change a text field to a date field in SQL Select Statement 【发布时间】:2013-08-19 15:33:54 【问题描述】:

我正在使用 SQL Report Builder 编写报告。我必须使用以下语句从文本字段 (customer_order_line_hist, field=message_text) 导出两个与日期相关的字段。

原始message_text字段除了日期信息外始终相同:“计划交货日期已从2013-06-28 00.00.00更改为2013-05-16 00.00.00”

我正在尝试将两个输出字段(FROM_DATE 和 TO_DATE)转换为日期时间字段或格式 mm/dd/yyyy。

我尝试了 CONVERT 和 CAST 功能,但没有成功。有什么想法吗?


Select  SUBSTR(t.message_text, 49, 10) AS FROM_DATE,
        SUBSTR(t.message_text, 72, 10) AS TO_DATE,
        t.order_no,
        t.line_no,
        t.rel_no,
        t.line_item_no,
        t.history_no
FROM    customer_order_line_hist t
Where   t.message_text Like 'The planned delivery date%'

【问题讨论】:

您使用的是什么 DBMS? SQL Server、mysql 【参考方案1】:

如果您的语法正确,Convert 应该可以工作。试试这个简化的测试:

 declare @sText varchar(max)

 select @sText = 'The planned delivery date has been changed from 2013-06-28 00.00.00 to       2013-05-16 00.00.00'


 select  convert(datetime, SUBSTRING(@sText, 49, 10)) AS FROM_DATE,
    convert(datetime, SUBSTRING(@sText, 72, 10)) AS TO_DATE

【讨论】:

我的数据库实际上是 Oracle,我正在使用 PL/SQL Developer 来测试我的 select 语句。运行您建议的简化测试时,我收到以下错误消息。 ORA-06550:第 1 行,第 9 列; PLS-00103:当期望以下其中一个开始函数 pragma 过程子类型类型 当前光标删除之前存在时遇到符号“@” Oracle 数据库 11g 版本 11.2.0.3.0 - 64 位 PL/SQL 版本 11.2.0.3.0 核心 11.2.0.3.0 用于 64 位 Windows 的 TNS:版本 11.2.0.3.0 NLSRTL 版本 11.2 .0.3.0 感谢您的帮助。我使用“TO_DATE”函数自己解决了这个问题。 好消息。编码愉快。

以上是关于如何在 SQL Select 语句中将文本字段更改为日期字段的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Oracle SQL 中将变量设置为 select 语句的结果

如何在shell 中将sql语句执行结果写入日志中

sql语句中的文本检索

MySQL语句中判断(字段值是不是为0)不是的话...

HQL语句只查询一个字段返回啥值比如 Select name from PO;

在mysql中将两个表字段中相同的值进行对比!