簡體   English   中英

在分隔日期字段(年、月、日)之間查找

[英]Find between with separated date fields (year,month,day)

我在分隔字段中的表格中有以下日期。 如何編寫查詢以顯示兩個日期之間的值。 例如:2/1/2011 和 2/6/2011 之間的值:

day         month            year          value 
--------------------------------------------------
2             6                2011         120
3             7                2011         130
5             5                2011         100
6             1                2011         50

我有同樣的情況,但月份列顯示月份名稱。 通過對給定查詢的輕微修改,我能夠獲取數據。

SELECT        *
FROM            Table_Name AS Tbl_Date
WHERE        (Year * 10000 + DATEPART(mm, CAST(Month + Year AS DATETIME)) * 100 + 1 
BETWEEN 20111101 AND 20121201)

希望這會有所幫助

正如其他人所說,我的第一個建議是使用日期。 或者,如果您需要比您的示例更詳細的信息,Datetime 或 Timestamp with Time Zone。

但如果你真的必須使用這些數據,我認為這樣的事情應該可以工作,這取決於你對 SQL 的風格:

SELECT value, CONVERT(DATE,CONCAT(CONCAT(CONCAT(CONCAT(day, "-"), month), "-"), year), 105) date FROM table_name where (2/1/2011) <= date and date <= (2/6/2011);

(with Oracle SQL, you can use to_date instead of convert and optionally use the || concatenation operator; with SQL server you have to use the + concatenation operator; with MySQL this should be right)

(2/1/2011) 和 (2/6/2011) 可以是與其他轉換類似的字符串,也可以是使用 PreparedStatement 或類似的東西直接作為日期輸入的字符串(這會更好)。

要轉換為 Date 以便於比較而不用擔心 dmy 或 mdy,以標准方式:

 DATEADD(year, year-1900, DATEADD(month, month-1, DATEADD(day, day-1, 0)))

所以,像這樣的東西。 最安全的日期格式是yyyymmdd (尤其是 SQL 服務器)

SELECT
  value,
  DATEADD(year, year-1900, DATEADD(month, month-1, DATEADD(day, day-1, 0))) AS realdate
FROM Mytable_name
WHERE
  '20110201' <= DATEADD(year, year-1900, DATEADD(month, month-1, DATEADD(day, day-1, 0))) 
  and
  DATEADD(year, year-1900, DATEADD(month, month-1, DATEADD(day, day-1, 0))) <= '20110206'

如果您使用的是 oracle 數據庫,那么您可以使用 TO_DATE 和 TO_CHAR 函數來實現此目標...

如下-

  select * from table_name 
  where to_date(day||month||year,'DDMMYYYY') 
  between &mindate and &maxdate

最小日期你可以把 2-jan-2011 和最大日期作為 2-jun-2011

我希望它對你有用:)

好吧,我找到了我想要的答案謝謝大家

SELECT Tbl_Date.Value,Tbl_Date.Year,Tbl_Date.Month,Tbl_Date.Day from Tbl_Date
where   ((Tbl_Date.Year*10000)+(Tbl_Date.Month*100)+Tbl_Date.Day)  between 110102 and 110602 

暫無
暫無

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

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