none
日期格式問題 RRS feed

  • 問題

  • 我的程式在一般電腦執行都正常
    但有一台電腦我日期如果為 2006/9/13 就會產生 Error 如下
    The conversion of char data type to smalldatetime data type resulted in an out-of-range smalldatetime value.
    The statement has been terminated
    但如果是 2006/9/12 就不會有錯,但進資料庫後日期會變成 2006 年 12 月 9 日
    我將我的SQL 執令直接貼到Query analyzer 執行
    Insert into syslog (account,ip,type,logtime) values ('a','b','3','2006/9/13')
    是沒問題的
    但用ado.net 執行此SQL ,日跟月會相反
    是否有哪裡可以改設定的
    控制台的地區語言選項,簡短日期設定是年/月/日沒錯
    還有哪裡可以設的?
    2006年12月27日 上午 01:20

解答

  • 建議你的程式在寫入資料庫時,使用 yyyy/M/d hh:mm:ss 格式。
    至於在資料庫中看到的日期,會依據 SQL Server 資料庫建立時設定的語系來格式化,但你可以在讀出時使用格式化字串(例如 DateTime.ToShortDateString() 或 DateTime.ToString("yyyy/M/d hh:mm:ss"))來讀出你要的格式。

    (程式開發類問題,請到 MSDN Forum SQL Server Development 區發問)

    2006年12月27日 上午 07:36
    版主
  • Hi: 您好,

    當您在比較或輸入至 INSERT 或 UPDATE 陳述式中指定日期時,請使用所有語言設定都作相同解譯的常數:

    ADO、OLE DB 和 ODBC 應用程式應該使用以下形式的 ODBC 時間戳記、日期和時間逸出子句:
    { ts 'yyyy-mm-dd hh:mm:ss[.fff] '} 例如:{ ts '1998-09-24 10:02:20' }
    { d 'yyyy-mm-dd'} 例如:{ d '1998-09-24' }
    { t 'hh:mm:ss'} 例如:{ t '10:02:20'}

    使用其他 API 或 Transact-SQL 指令碼、預存程序和觸發程序的應用程式,應該使用未分隔的數值字串。例如,yyyymmdd 為 19980924。

    使用其他 API 的應用程式,或 Transact-SQL 指令碼、預存程序和觸發程序,都應該針對 date 與 smalldate 資料類型以及字元字串資料類型之間的所有轉換使用明確樣式參數的 CONVERT 陳述式。例如,下列陳述式在所有日期格式連接設定下的解譯都是一樣的:


    SELECT *
    FROM AdventureWorks.Sales.SalesOrderHeader
    WHERE OrderDate = CONVERT(DATETIME, '19960719', 101)


    參考資料:
    撰寫國際性通用的 Transact-SQL 陳述式
    http://msdn2.microsoft.com/zh-tw/library/ms191307.aspx

    希望對您有幫助 ...

    Best Regards
    Derrick Chen 德瑞克

    2006年12月27日 上午 09:21

所有回覆

  • 建議你的程式在寫入資料庫時,使用 yyyy/M/d hh:mm:ss 格式。
    至於在資料庫中看到的日期,會依據 SQL Server 資料庫建立時設定的語系來格式化,但你可以在讀出時使用格式化字串(例如 DateTime.ToShortDateString() 或 DateTime.ToString("yyyy/M/d hh:mm:ss"))來讀出你要的格式。

    (程式開發類問題,請到 MSDN Forum SQL Server Development 區發問)

    2006年12月27日 上午 07:36
    版主
  • 找到兇手了

    原來是對方mis新增資料庫使用者時

    選擇的語言不是繁體中文

    2006年12月27日 上午 08:55
  • Hi: 您好,

    當您在比較或輸入至 INSERT 或 UPDATE 陳述式中指定日期時,請使用所有語言設定都作相同解譯的常數:

    ADO、OLE DB 和 ODBC 應用程式應該使用以下形式的 ODBC 時間戳記、日期和時間逸出子句:
    { ts 'yyyy-mm-dd hh:mm:ss[.fff] '} 例如:{ ts '1998-09-24 10:02:20' }
    { d 'yyyy-mm-dd'} 例如:{ d '1998-09-24' }
    { t 'hh:mm:ss'} 例如:{ t '10:02:20'}

    使用其他 API 或 Transact-SQL 指令碼、預存程序和觸發程序的應用程式,應該使用未分隔的數值字串。例如,yyyymmdd 為 19980924。

    使用其他 API 的應用程式,或 Transact-SQL 指令碼、預存程序和觸發程序,都應該針對 date 與 smalldate 資料類型以及字元字串資料類型之間的所有轉換使用明確樣式參數的 CONVERT 陳述式。例如,下列陳述式在所有日期格式連接設定下的解譯都是一樣的:


    SELECT *
    FROM AdventureWorks.Sales.SalesOrderHeader
    WHERE OrderDate = CONVERT(DATETIME, '19960719', 101)


    參考資料:
    撰寫國際性通用的 Transact-SQL 陳述式
    http://msdn2.microsoft.com/zh-tw/library/ms191307.aspx

    希望對您有幫助 ...

    Best Regards
    Derrick Chen 德瑞克

    2006年12月27日 上午 09:21
  • 感謝兩位的指導

    讓我獲益良多,謝謝

    2006年12月27日 上午 09:26
  •  

    感謝兩位的指導

    讓我獲益良多,謝謝

    2006年12月27日 上午 09:28