2016-07-21 11 views
-1

Das Ziel besteht darin, standardmäßig alle Eingabefelder einer Abfrage mit einer '%' aufzufüllen und den Benutzer echte Werte eingeben zu lassen, wo immer sie wollen. Dies verursacht jedoch ein Problem für das Feld DATE/TIME. Ich erhalte den Fehler: Conversion failed when converting date and/or time from character string. Wie kann ich das Äquivalent von '%' aber für Daten erreichen?SQL: Was entspricht "%" für Datum/Uhrzeit?

DECLARE @trans_date datetime = '%' 

SELECT 
    t.lp_num, 
    t.trans_date 
FROM ISW_LPTrans AS t 
WHERE t.trans_date = @trans_date 

Edit: - Entfernt die LIKE und ersetzt mit =, weil die Menschen auf, dass zu viel gehalten konzentriert und es ist nicht im Mittelpunkt dieser Frage.

+0

Wenn itrans_date eine datetime ist und als solche behandelt werden soll, suchen Sie nach Datum * Bereichen * mit BETWEEN/DATEDIFF/DATEPART etc. Andernfalls müssten Sie die Spalte in einen Zeichentyp umwandeln, der lautet ineffizient und für die meisten Suchszenarien nicht übermäßig nützlich. –

+0

Wie kann der Benutzer Daten eingeben? Ist es von einer externen Quelle oder direkt innerhalb des DBMS? Ich bin nicht 100% sicher über 2008, aber ich benutze 2014 und Sie können LIKE '%' direkt mit dem Datum verwenden. Das Problem besteht darin, dass Sie versuchen, die Zeichenfolge '%' als Datum zu speichern. Wenn Sie LIKE verwenden, wird es anders behandelt (im Vergleich zur Verwendung eines = -Zeichens). – CodyMR

+0

@ Cody360c wird es durch Report Builder 3.0 Schnittstelle sein. Also durch einen Bericht. – whatwhatwhat

Antwort

0

Dies ist zu lang für einen Kommentar. Ihre Anfrage macht keinen Sinn. LIKE ist für Zeichenfolgen und Daten sind keine Zeichenfolgen.

Wenn Sie möchten, können Sie das Datum in ein kanonisches Zeichenfolgenformat konvertieren und dann verwenden.

Datumsauswahl ist jedoch die typische Lösung für die Datumsauswahl, und der resultierende Code verwendet LIKE nicht.

+0

Das übergeordnete Ziel besteht darin, Benutzern in Report Builder 3.0 zu erlauben, entweder den Standardwert "%" im Eingabefeld zu belassen oder ihr eigenes Datum einzugeben. Das heißt, die Abfrage sollte standardmäßig alle Daten zurückgeben und sie dann nur um ein bestimmtes Datum eingrenzen, wenn der Benutzer ein echtes Datum angibt. Wie kann ich das erreichen? – whatwhatwhat

+0

@whatwhatwhat. . . Normalerweise würde die Anwendung entweder ein einzelnes Datum oder einen Datumsbereich auswählen und diese als Parameter an die Abfrage übergeben. Wenn die Parameter 'NULL' sind, werden alle Daten ausgewählt. –

+0

Ja, das habe ich versucht zu erreichen - ich versuchte, den Effekt der Auswahl aller Daten zu replizieren, aber von der Abfrageseite. – whatwhatwhat

0

Sie können LIKE-Schlüsselwörter nicht direkt auf Daten verwenden. LIKE wird meistens für String-Werte verwendet.

Sie können jedoch das CONVERT functio n verwenden, um Ihr Datum als varchar zu übertragen und dann das Schlüsselwort LIKE anzuwenden. Zum Beispiel:

CONVERT(VARCHAR(25), trans_date, 126) LIKE '2016-10-01%' 

The goal is to, by default, populate all the input fields of a query with a '%' and let the user put in real values wherever they want.

Wenn Sie möchten, dass Benutzer erlaubt sein soll, ein Datum eingeben, dann können Sie einfach Spalte NULL Wert Ihres Datums liefern, anstatt es mit einem% -Wert von bevölkern (was absolut unbestimmt für eine Datumsspalte)

+0

Dies erfordert eine Warnung über die Auswirkungen auf die Leistung. –

+1

Ist das nur in frühen Versionen von SQL-Server? Ich benutze 2014 und ich kann LIKE direkt mit Datum – CodyMR

+0

@ Cody360c interessanten Punkt verwenden. – whatwhatwhat