簡體   English   中英

SQL比較日期

[英]SQL Comparing Dates

在數據庫表中,我設置了date屬性,但是將其類型設置為varchar而不是Date。 我的問題是,我仍然可以在SQL查詢中比較這些日期嗎?

我數據庫中的日期以以下格式存儲:

dd / mm / yyyy hh:mm:ss

我必須在PHP中執行如下所示的SQL查詢:

SELECT *
FROM DBtable
WHERE DBname='$name' AND date>='01/01/2015' AND date<='01/09/2015';

我將欣賞一個如何做到這一點的例子。 謝謝您的幫助。

您需要轉換/廣播以進行比較:

SELECT *
FROM DBtable
WHERE DBname='$name' 
  AND CAST(date AS DATETIME) >='2015-01-01' 
  AND CAST(date AS DATETIME)<='2015-01-09'
;

最好將值存儲為適當的數據類型,以避免這種低效率。 如果要在沒有時間部分的情況下進行比較,也可以使用DATE而不是DATETIME 語法和可用的數據類型因數據庫而異,因此上述內容可能需要調整。

更新:由於您使用的是MySQL,因此可以使用以下內容:

SELECT *
FROM DBtable
WHERE DBname='$name' 
  AND STR_TO_DATE(`date`, '%d/%c/%Y') >= '2015-01-01' 
  AND STR_TO_DATE(`date`, '%d/%c/%Y') <= '2015-01-09'
;

是的,您可以將Varchar轉換為Date 這是一個例子:

SELECT
CAST(date_column AS DATETIME) 
FROM 
TABLE_NAME

在您的情況下,它可能看起來像:

SELECT *
FROM DBtable
WHERE DBname='$name' 
AND CAST(date AS DATETIME) >='01/01/2015' 
AND CAST(date AS DATETIME) <='01/09/2015';

在進行任何比較之前,可以將varchar轉換為datedatetime時間。

但是, 每次將日期與某事進行比較時,您都必須這樣做。 這是因為如果將它們與varchar進行比較,則以下比較都是正確的:

'2/1/2015' > '1/5/2016'
'25/1/2015' > '15/2/2015'
'11/1/2015' < '3/1/2015'

如果您想提取日期的某些基於時間的方面,例如在8:00 AM之前的任何記錄,則還需要進行轉換。 如果您的日期是varchar ,則沒有簡單的方法可以做到這一點。

並假定數據庫中的值始終可以解析為日期! 如果一個空字符串或其他類型的數據進入那里,則CONVERT(datetime, MyColumn)將失敗。

因此,我強烈建議您將列更改為datedatetime 這將使您的生活更加輕松。

暫無
暫無

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

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