Wildcard bei MS-SQL-Server



  • Kann mir einer von euch weiterhelfen?
    Ich versuche schon ewig ein simple query zu bilde in der ich Wildcards verwenden will. Ich hab einen MS-SQL-Server und meine Query sollte beinhalten:

    where [Motornummer] = 2C Wildcard
    

    Ich hab schon so viel probiert und nichts geht!
    Es soll danach darauf hinauslaufen, dass ich das ganze auf ein Timestamp anwenden kann, also BETWEEN Tag egal Uhrzeit 14:00:00 and Tag egal Uhrzeit 22:00:00.

    Aber das kann nicht klappen wenn ich nciht mal mit Wildcards klar komme!
    Für Hilfen schon im Voraus Dankeschön!



  • Wenn dir der Tag egal ist, dann frag einfach nicht danach:

    BETWEEN uhrzeit '14:00:00' AND uhrzeit '22:00:00'

    Sonst PROCEDUREs oder FUNCTIONs. Denen kannst du Werte übergeben.
    Hier ein Beispiel:

    CREATE FUNCTION TOPn(rang INT)
    RETURNING INT, CHAR(4), DECIMAL(8,2);
    DEFINE i, j INT;
    DEFINE name CHAR(20);
    DEFINE summe DECIMAL (8,2); 
    FOREACH 
    SELECT  pr_name, mittel INTO name, summe 
          FROM projekt pro1
         	WHERE rang >
    (SELECT COUNT(*) FROM projekt pro2 
    WHERE pro1.mittel < pro2.mittel)
        	ORDER BY 2 DESC
    RETURN rang, name, summe WITH RESUME;
    END FOREACH;
    END FUNCTION;
    
    EXECUTE FUNCTION TOPn(3);
    

    MfG



  • ähm ich kann aber leider nicht wenn ich als Typ Timestamp hab machen where [bla] Between 14:00:00 and ... hab ich schon probiert! 😞

    [Edit] Was ist das für ein Funktion? Kann ich Funktionen in SQL schreiben? Wie verwende ich die dann in ner Query?



  • timestamp is a data type that exposes automatically generated binary numbers, which are guaranteed to be unique within a database.

    Verwechselst du TIMESTAMP mit DATETIME ?



  • Vielleicht hilft dir folgendes weiter:

    CREATE TABLE test(test_id INT PRIMARY KEY, zeit DATETIME);
    
     DECLARE @vorher  AS DATETIME
     DECLARE @jetzt   AS DATETIME
     DECLARE @nachher AS DATETIME
    
     SET @jetzt    = GETDATE()
     SET @vorher   = DATEADD(hh, -3, @jetzt)
     SET @nachher  = DATEADD(hh,  3, @jetzt) 
    
     INSERT INTO test VALUES(1, @vorher);  -- 15
     INSERT INTO test VALUES(2, @jetzt);   -- 18 
     INSERT INTO test VALUES(3, @nachher); -- 21
    
    -- SELECT CONVERT(CHAR(20), zeit, 8) AS zeit FROM test;
    
    SELECT * FROM test WHERE DATEPART(hh, zeit) BETWEEN 18 AND 19;
    

    SQL Übersicht 💡
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_tsqlcon_6lyk.asp



  • als wildcards in sql
    gibts % (0 bis n zeichen) und _ (genau ein zeichen).



  • Zuerst mal vielen Dank euch ganz besonders dir Tanzfreak für deine Hilfe, nein ich verwechsle die Typen nicht ich hab Timestamp als Typ. Jetzt habe ich aber etwas ganz neues heraus gefunden. Das Problem das ich habe ist ein mfc Problem, der gibt mir meine Wildcards aus meinem Filter nicht so an die DB sondern versucht sie selbst zu verarbeiten! Dann kann es ja auch nicht gehen!

    Zumindest glaube ich dass das das Problem ist, nach dem ich viel getestet habe.

    Vielen Dank dennoch!



  • Also ich hab jetzt das MFC Problem ausgemärzt, aber es geht immernoch nicht! Kann mir einer sagen was an folgender Query falsch ist?

    m_pSet->m_strFilter = _T("[ID] = 55%");
    	LPCTSTR lpszSQL = _T("SELECT [ID] FROM [dbo].[TRWErgebnisse] [WHERE m_pSet->m_strFilter]");
    	m_pSet->Open(AFX_DB_USE_DEFAULT_TYPE,lpszSQL,NULL);
    }
    

    also quasi:

    SELECT [ID] FROM [dbo].[TRWErgebnisse] WHERE [ID] = 55%
    

    Fehler:

    ---------------------------
    ACRSQL
    ---------------------------
    Zeile 1: Falsche Syntax in der Nähe von '%'.
    Anweisung(en) konnte(n) nicht vorbereitet werden.

    ---------------------------
    OK
    ---------------------------

    und wenn ich das % ganz weglasse ungültiger Deskriptorindex.
    Kann mir jemand helfen?



  • .. WHERE id LIKE ..

    Kenne die genaue LIKE-Syntax nicht, aber schau mal hier:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_la-lz_115x.asp



  • ah OK!
    so geht es nun!

    UpdateData(true);
    	m_pSet->m_strFilter = _T("(Motornummer like \'" + m_sSuchen + "%\')");
    	m_pSet->Requery();
    	UpdateData(false);
    

Anmelden zum Antworten