簡體   English   中英

Oracle SQL 選擇日期

[英]Oracle SQL selecting date

我試圖選擇頭銜、姓氏、出生日期和頭銜為“銷售代表”的國家,並且他們出生於 1950 年之前或 1950 年。

當將日期放入代碼中時,它給了我一個錯誤。

我認為這是正確的:

SELECT title,lastname,birthdate,country FROM EMPLOYEES 
WHERE title='Sales Representative' AND BIRTHDATE <= '01/01/1950 00:00:00';

它給出的錯誤ORA-01843: not a valid month

如果你能幫助我,謝謝。

這是表的示例數據:

在此處輸入圖像描述

使用 ANSI 日期文字

and birthdate <= date '1950-01-01'

或使用包含格式掩碼的顯式to_date

and birthdate <= to_date( '01/01/1950 00:00:00'
                         ,'MM/DD/YYYY HH24:MI:SS' )

否則,Oracle 將嘗試使用會話的nls_date_format設置來執行從字符串到日期的隱式轉換。 這通常會產生問題,因為不同的人、不同的應用程序等都可能會以不同的方式設置他們的 NLS 設置。 因此,您可以非常輕松地編寫適合您的代碼,但當您的隊友連接到相同的數據庫或代碼在一個工具中為您工作但由於環境配置方式不同而無法在另一個工具中工作時失敗。

您可以只使用EXTRACT並檢查年份是否 <= 1950:

...WHERE...AND EXTRACT (YEAR FROM birthdate) <= 1950...

如果不應該包含 1950,則取 < 1950 而不是 <= 1950(您的描述告訴它應該包含,您自己的查詢不會)。

你可以試試這個,只需輸入你想要的year

SELECT title,lastname,birthdate,country FROM EMPLOYEES 
WHERE title='Sales Representative' AND EXTRACT(YEAR FROM
   TO_DATE(BIRTHDATE, 'DD-MON-YYYY')) <= 1950
   ORDER BY BIRTHDATE

您可以使用嚴格小於生日的日期文字,例如

...
WHERE title='Sales Representative'
  AND birthdate < date'1951-01-01'

使查詢返回包含 1950 年的所需值,而如果沒有應用轉換、轉換或函數,如果birthdate列上有索引,您可能會受益。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM