none
請教一個有關資料庫時間欄位比對 RRS feed

  • 問題

  • Hi all,

    想請教以下幾個新手問題:

    1.

    declare  @date varchar(10)

    set @date='2012-02-13'

    select * from tmp where Date>=@date

    在SQL SERVER中有一tmp的table,且有一Date欄位,其型別為Datetime

    為什麼輸入一個varchar型別的變數,可以不用轉換為datetime,就可以進行比較?

    2.一般UI界面在讓使用者點選日期時,大半都只帶有年月日,但一旦在程式中轉型為Datetime時,預設會自動轉為

    2012/02/13 上午 12:00:00 後面的時間會自己跑出來,想請問有無辦法可以限定只要前面的日期就好,因為在SQL SERVER中,欄位若為datetime時,其存入的資料為2012-02-13 15:45:47.000,

    則若要撈出在13號的資料,兩者一比較,就只撈的到13號下午的資料,撈不到上午的資料。


    3.請問在SQL SERVER中,若欄位為varchar,但裡面的資料為2012-02-13 15:45:47.000 日期的格式

    若要撈某一段區間的資料,是否一定要轉換為datetime的格式來比較?因為我用了varchar 欄位直接比大小,

    還是可以撈出資料?為何?



    • 已編輯 菲羽 2012年2月28日 下午 01:15
    • 已移動 阿尼 2012年2月28日 下午 03:12 (從:ASP.NET 與 AJAX(ASP.NET and AJAX))
    2012年2月28日 下午 12:04

解答

  • 1.因為SQL會幫你轉成DateTime

    2.「2012/02/13 上午 12:00:00」 等同於「2012/02/13 00:00:00」,相當於只有日期部份

    3.你真的確定純字串比對沒問題嗎?

    • 已標示為解答 菲羽 2012年3月2日 上午 12:31
    2012年2月28日 下午 03:10

所有回覆

  • 若db裡有日期與時間,您可以用range來取出記錄,例如

    select *  from xxx where yyy >= '2012/2/13' and yyy<'2012/2/14'

    2012年2月28日 下午 12:36
  • 若db裡有日期與時間,您可以用range來取出記錄,例如

    select *  from xxx where yyy >= '2012/2/13' and yyy<'2012/2/14'

    Hi,

    但如果就我第二點提到的,2012/2/3

    是由前端輸入的,但在轉成datetime後,會自動加上時間,那麼就會變成2012/2/13 上午 12:00:00

    如此,yyy>2012/2/13 上午 12:00:00 就只撈的到下午的資料,撈不到上午的資料了.

    2012年2月28日 下午 01:17
  • 1. 若您是採用組合出sql statement的方式,當然可以不要加入時間, 就不會有時間的問題

    2. 若您是用SqlParameter, 將2012/2/3, 2012/2/4轉成DateTime後傳入試試看,不會有問題才對

    試試看就知道囉

    • 已提議為解答 Alex_Lee 2012年3月1日 上午 11:58
    • 已取消提議為解答 Alex_Lee 2012年3月1日 上午 11:58
    2012年2月28日 下午 01:49
  • 改用DateDiff函數作日期時間的比較

    例如:

    select * From xxx where DateDiff(dy, yyy , @startDateTime) >=0 And DateDiff(dy, yyy , @endDateTime) <=0


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2012年2月28日 下午 02:15
  • 1.因為SQL會幫你轉成DateTime

    2.「2012/02/13 上午 12:00:00」 等同於「2012/02/13 00:00:00」,相當於只有日期部份

    3.你真的確定純字串比對沒問題嗎?

    • 已標示為解答 菲羽 2012年3月2日 上午 12:31
    2012年2月28日 下午 03:10
  • 1. 因為有個東西叫 "隱含轉換"

    2. 你如果都是 DateTime 型別, 有沒有時間沒差吧.同阿尼說的

    3. 那是因為你還沒出包, 而不是沒問題.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2012年2月28日 下午 03:37