2017-08-31 120 views
1

我想獲得區域datetime格式爲SQL Server。我在使用Delphi7這裏。我的情況是如下:Delphi7:獲取SQL服務器系統日期和時間格式

如果我的服務器的區域日期格式(例如)yyyymmdd和客戶端的SQL服務器爲mm/dd/yyyy(或任何其他有效的日期格式),比生成應包含正確的日期格式的查詢。

注:我已經寫在Delphi7的其中設置默認格式 MSSQL,將讀取服務器的區域日期格式太代碼。並將服務器的區域日期格式轉換爲MSSQL日期格式。

+3

不,查詢應該包含可綁定參數而不是文本值。 – Victoria

+0

我有用** delphi **編寫的代碼,它爲MSSQL設置了默認格式。它會將服務器的區域日期格式轉換爲MSSQL日期格式。 –

+5

我仍然錯失了爲什麼要使用文本值進行操作的真正原因。爲什麼要構建帶有日期和時間值表示爲文本的SQL命令? – Victoria

回答

2

如果我的服務器的區域日期格式(如)YYYYMMDD和客戶端的 SQL服務器是有MM/DD/YYYY(或任何其他有效的日期格式),比 查詢生成應包含適當的日期格式。

你讓自己很難。
您構建的查詢不必關心您的客戶機或SQL Server的區域格式是如何設置的。
無論區域設置如何,sql server都會理解語言中性格式。

你可以在這裏找到它們http://www.karaszi.com/SQLServer/info_datetime.asp#DtFormatsInput

所以,當你真的想建立自己的查詢文本比使用
"YYYYMMDD"日期,和日期時間"YYYYMMDD hh:mm:ss" EX(「20170831 14時23分05秒」)。
現在你不必再關心格式了。

更好的方法是將參數用於查詢。

+0

...它爲我工作。非常感謝您的幫助。 –

+0

沒問題,很高興我能幫上忙 – GuidoG

0

在我看來,你應該做的是去了解那裏是你的客戶的服務器的標準格式,如果它是標準的,那讓你的約會對象在不同的​​變量,即不是一個單一的文本/數字格式「年月日」。爲每個使用不同的變量。並通過閱讀格式將它們相互匹配。

如果以上是你的問題,那麼試試這個。

select SUBSTRING(Date,0,CHARINDEX('/',Date,0)) as Splitted  

(在這個日期是在客戶端的格式)

或者

Month=SUBSTRING(Date,0,2) 
Date=SUBSTRING(Date,3,2) 
Year=SUBSTRING(Date,6,4) 

然後顯示在你想要的任何格式的日期。

+0

我們在不同的地理位置有不同的客戶。它不是我們會得到的一個日期格式。 –

+0

使用相同的方法,您可以根據日期的位置和格式分隔查詢。 –

+0

這就是我的主要問題:「如何使用delphi7代碼獲取SQL Server的區域日期格式?」 –

0

嘗試是這樣的假設全區有相同的格式 選擇*形式的數據,其中面積=「ABC」

然後搜索「:」或「/」

現在做的一個子文本被「:」或「/」分隔並得到a,b和c變量。

由於我假設相同的格式acroos區域,我們可以檢查一個> 12和兩位數然後它是一個日期,b是兩個didgits和< 12月,如果c有四個數字,那麼它是年。 你可能會認爲如果我們01/01/2001那麼什麼?

因此,我假設所有來自具有統一格式的同一地點的輸入。檢查所有條件並通過檢查是否滿足所有條件得到確定的答案。

如果你處理實時類型的數據庫,然後比較今天的日期。

0

該查詢返回用於當前會話的日期格式(@@語言點,其語言設置)

Select DateFormat 
From sys.syslanguages 
Where name = @@Language 
+0

感謝您的試用。但是這會將日期轉換爲Server的區域設置,我想要的是它應該是SQL Server格式的格式。 –

+0

我已經更改了從SQL Server設置獲取格式的答案。 –

0

嘗試在查詢的一些事情是這樣的:

轉換(VARCHAR,DOB, 103)爲「出生日期」

+0

我想要的是在運行時獲取SQL服務器的日期格式。這不會幫助我。 –