将日期转换为另一种格式的 SQL 查询

Posted

技术标签:

【中文标题】将日期转换为另一种格式的 SQL 查询【英文标题】:SQL query to convert Date to another format 【发布时间】:2011-06-02 07:16:43 【问题描述】:

感谢您的帮助。我无法确定日期列中“值”的类型/格式。我猜它是朱利安日期格式。

列是paid_month,值如下。

                  200901
                  200902

所以,请帮助编写 SQL 查询以将日期列中的上述值(主要是 Julian 格式)转换为正常日期(MM/DD/YYYY)。

谢谢 罗希特

嗨,

很抱歉没有提供完整的信息。

1) 它是一个 Oracle 数据库。 2)给定的列是Paid_Month,值为200901,200902

3)我也很困惑,上面的值给出了月份和年份。如果我的猜测是正确的,则没有给出日期。

4)如果它不是 Julian 格式,那么也请帮助我获得至少 mm/yyyy 的 SQL


我正在使用 Oracle 数据库并运行查询 谢谢我得到了答案。

**现在,我必须执行相反的操作,将日期 01/09/2010 转换为具有 6 位数字的字符串。 请帮助语法 - 选择 to_char(01/01/2010,**

【问题讨论】:

您使用的是什么数据库?转换为日期的功能因供应商而异。 应该说你正在使用哪种风格的 SQL.... 我猜paid_month 实际上是一个 (var)char 列,而不是一个 date(time) 列... 或者 number(6) 或者 int4 什么的?年=付月/100,月=付月 % 100,日=01?日子从哪里来?我同意,我们需要 DB 供应商,因为转换取决于供应商。我们需要知道paid_month 的格式。字符串、数字还是其他? 【参考方案1】:

它看起来像 YYYYMM - 根据您的数据库变体,尝试STR_TO_DATE(paid_month, 'YYYYMM'),然后对其进行格式化。

注意:MM/DD/YYYY 不是“正常”格式 - 只有美国人使用它。世界其他地区使用 DD/MM/YYYY

【讨论】:

我正在使用 Oracle DB 并运行查询 selectpaid_month = STR_TO_DATE('200901','%Y%m') from dual;【参考方案2】:

对于 mysql 检查 http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format

例子:

SELECT DATE_FORMAT(NOW(), '%d/%m/%Y')

【讨论】:

【参考方案3】:

对于 MySQL,您将使用 STR_TO_DATE 函数,请参阅http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_str-to-date

SELECT STR_TO_DATE(paid_month,'%Y%m');

听起来该列包含一些正常日期和一些 YYYYMM 日期。如果目标是更新整个列,您可以尝试隔离 YYYYMM 日期并仅更新这些日期。比如:

UPDATE YourTable
SET paid_month = DATE_FORMAT(STR_TO_DATE(paid_month, '%Y%m'), '%m/%d/%Y')
WHERE LENGTH(paid_month) = 6

【讨论】:

【参考方案4】:
SELECT (paid_month % 100) + "/01/" + (paid_month/100) AS paid_day
FROM tbl;

我不确定 oracle 如何连接字符串。通常,您会看到 ||在 SQL 中:

SELECT foo || bar FROM ...

或功能:

SELECT cat (foo, bar) FROM ...

【讨论】:

以上是关于将日期转换为另一种格式的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

在java中将日期从一种格式转换为另一种格式[重复]

如何在java中使用日光将日期格式从一个时区转换为另一种时区[重复]

无法将日期时间从字符串转换为另一种格式(例如:14/12/2021 03:34:03 PM 到 03:34 pm)

将一种格式的字符串日期转换为另一种格式的日期对象

在 PHP 中将一种日期格式转换为另一种日期格式

sql如何将字符串转为日期