在SQL中格式化日期

时间:2018-10-03 14:43:51

标签: sql oracle

我正在尝试编写一个查询,该查询显示日期为"January 3, 2011"的最新书籍,但是在尝试格式化日期时却不断出错。

以下是未格式化日期的工作查询:

SELECT title, pubdate 
FROM   books
WHERE  pubdate =
       ( SELECT MAX(pubdate)
         FROM   books );

2 个答案:

答案 0 :(得分:2)

如果将pubdate定义为DATE列,则可以使用to_char对其进行格式化:

to_char(pubdate, 'fmMonth dd, YYYY') as pubdate

这会将其转换为指定格式的字符串(但让语言默认为用户的nls_date_language设置)。

Oracle中的日期不是您以某种格式存储的字符串。它们包含二进制数据,并且在显示它们时必须按照所需的格式对其进行格式化。 (有时人们将日期存储为字符串,这除了是一个坏主意之外,当他们要求以不同的格式设置日期时,还会引起混乱。)

答案 1 :(得分:1)

使用To_charDatetime转换为您期望的格式字符串。

这是一个样本。

CREATE TABLE books(pubdate Date, title varchar(50));

insert into books values ('18-Mar-06','A');

insert into books values ('11-Nov-06','B');

查询1

SELECT title,To_char(pubdate,'MON DD, YYYY')  pubdate
FROM books
WHERE pubdate =
    (SELECT MAX(pubdate)
     FROM books)

Results

| TITLE |      PUBDATE |
|-------|--------------|
|     B | NOV 11, 2006 |