2012-03-29 10 views
4

Frage:Howto konvertieren Datetime zu Datum mit einer ODBC-Funktion?

Ich brauche das Datum nur (= Datum ohne Zeit) mit einer ODBC-Escape-Sequenz zu erhalten.

jedoch

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

hat die Spalte als Datetime-Wert (Datum mit Uhrzeit) zurück.

Gibt es eine ODBC-Funktion ich den Datum Wert erhalten nur verwenden kann?

Hinweis:
Dies ist keine doppelte Frage.
Ich weiß, man die Funktion nicht -ODBC konvertieren können, wie

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

aber ich brauche wirklich eine ODBC Funktion aus Kompatibilitätsgründen.

+0

SQL Server 2005 oder 2008? – Diego

+0

... oder postgres, sein Hersteller + Treiber spezifisch –

+1

@Alex: ODBC: OpenDataBaseConnectivity. Es definiert Fluchtfunktionen, die überall gleich sind. Aber NUR die Flucht funktioniert. –

Antwort

5

könnten Sie verwenden:

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

Arbeiten in Umgebungen I zur Verfügung zu testen auf (SQL Server 2000 bis 2012).

Update:

Hier ist eine andere Art und Weise, dass ich sein glauben könnte schneller als konvertieren verwenden.

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

Großartig, dachte auch über Zeitstempeldiff, aber zwischen Datum und Datum-Zeit-Wert. Irgendwie entging mir diese Variante. Brilliant in der Einfachheit. –

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

oder

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

Sagte ich nicht 3 (oder ist es 4) mal ODBC - mit ODBC fett? Und einmal habe ich "nicht konvertieren" nur um sicher zu sein? Irgendwie kam die Nachricht immer noch nicht ... Also, wenn Sie mir bitte erklären könnten, wo Sie eine ODBC-Escape-Sequenz in Ihrer Antwort sehen? Weißt du, die Dinge, die mit {fn (...)} beginnen?Sie wissen, alles innerhalb von fn wird durch datenbankspezifische Funktionen ersetzt, Ihre wird nicht ersetzt, weil es keine ODBC-Funktion ist, und funktioniert daher nicht mit etwas, das nicht Microsoft SQL Server heißt, wie PostGreSQL Server für Beispiel, wie Sie von den Tags sehen konnten. –

+0

Und Variante 1 funktioniert übrigens nur auf einem SQL-Server mit englischer Lokalisierung, Variante 2 ist genauso schlecht. Du behandelst Daten nicht korrekt. Der SQL Server-spezifische Weg wäre CONVERT (datetime, {fn CURDATE()}, 120) ODER CAST (FLOOR (CAST (DATETIME_COLUMN as float)) bzw. datetime). BTW, wie möchten Sie Varchars mit <= and => vergleichen? (OK, das ist mein Fehler, das berechnete Datum wird tatsächlich in der WHERE-Klausel verwendet, ich habe es zu demonstrativen Zwecken in ein SELECT geschrieben). –

Verwandte Themen