将日期转换为另一种格式的 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中使用日光将日期格式从一个时区转换为另一种时区[重复]