2012-03-29 9 views
4

質問:私は(時間なし=日付)日付だけを取得するためにODBC関数を使用してdatetimeを日付に変換する方法はありますか?

必要ODBCエスケープシーケンスと。

しかし

SELECT 
    {fn CONVERT(SomeTable.Col_With_DateTime_Value, SQL_DATE)} 
FROM SomeTable 

日時値(時間と共に日付)として列を返すありません。

は、任意のODBC関数は、私が日付のみを取得するために使用することができますありますか?

注:
これは重複する質問ではありません。
私は1つが

CONVERT(char(8), getdate(), 112) AS v112_ISO 
CONVERT(char(10), getdate(), 104) AS v104_XML 

のように、 -odbc変換機能を使用することができます知っているが、私は本当に互換性のためにODBC機能を必要としています。

+0

SQL Server 2005または2008? – Diego

+0

...またはpostgres、そのベンダー+ドライバ固有 –

+1

@Alex:ODBC:OpenDataBaseConnectivity。それはどこでも同じエスケープ関数を定義します。しかし、エスケープだけが機能します。 –

答えて

5

あなたはこれを使用することができます:

select {fn convert({fn timestampdiff(SQL_TSI_DAY, 0, DatetimeCol)}, SQL_DATE)} 
from SomeTable 

作品を私がテストするために利用可能な環境(SQL Serverの2000年から2012年)で。

更新:

ここでは、私が使用して変換するよりも速いかもしれないと考えているもう一つの方法です。

select {fn timestampadd(SQL_TSI_DAY, {fn timestampdiff(SQL_TSI_DAY, 0, DatetimeCol)}, 0)} 
from SomeTable 
+2

素晴らしいですが、timestampdiffについても考えていましたが、dateとdatetimeの間の値です。どういうわけかこの変種は私を逃した。シンプルで華麗です。 –

-2
select cast(day(getdate()) as varchar(2))+'/'+cast(month(getdate()) as varchar(2))+'/'+cast(year(getdate()) as varchar(4)) 

または

SELECT CONVERT(VARCHAR(10),GETDATE(),111) 
+0

私は3(またはそれは4)倍のODBCと言いませんでしたか?ODBCを太字で使用していますか?そして、私は「変換しない」ということを確かに追加しました。どういうわけか、まだメッセージが到着していませんでした...もしあなたが回答でODBCエスケープシーケンスがどこにあるのか教えてください。あなたは{fn(...)}で始まっていることは知っていますか?ご存知のように、fn内のすべてがデータベース固有の関数に置き換えられ、ODBC関数ではないため置き換えられないため、PostgreSQLサーバーのようにMicrosoft SQL Serverと呼ばれないものでは機能しませんあなたがタグから見ることができます。 –

+0

ところで、バリアント1は英語のローカリゼーションを使用するSQLサーバー上でのみ動作しますが、バリアント2も同様に悪いです。あなたは正確に日付を扱っていません。 SQLサーバー固有の方法は、それぞれ日付時刻としてCONVERT(datetime、{fn CURDATE()}、120)、OR CAST(FLOOR(CAST(DATETIME_COLUMN as float)))です。ところで、どのように<= and =>とvarcharsを比較したいですか? (OKこれは私のせいで、計算された日付は実際にwhere句で使われています。私は実証目的でselectに書きました)。 –