Discussion:
Platzhalter bei Suche im Datumsfeld (MS-SQL)
(zu alt für eine Antwort)
r***@gmx.de
2005-06-21 11:58:50 UTC
Permalink
Guten Tag,

es wäre schön, wenn mir jemand da draußen unter die Arme greifen
könnte.

Ich greife aus PHP über ODBC auf einen MS-SQL-Server zu. Dabei soll es
möglich sein, nach Datumsfragmenten zu suchen, also z.B.

Select ... from tbl_... where Datumsfeld like '*.9.*';

für alle Datensätze aus irgendeinem September oder

Select ... from tbl_... where Datumsfeld like '1.*.1977';

für alle Datensätze von einem Monatsersten im Jaht 1977. Der zu
verleichende String ('*.9.*', '1.*.1977') steht in einer Variablen.

Geht das überhaupt? Und wenn ja, wie?

Danke im Voraus für die Mühe

Ruben Becker
Joachim Duerr
2005-06-21 12:21:36 UTC
Permalink
Post by r***@gmx.de
Ich greife aus PHP über ODBC auf einen MS-SQL-Server zu. Dabei soll es
möglich sein, nach Datumsfragmenten zu suchen, also z.B.
Select ... from tbl_... where Datumsfeld like '*.9.*';
für alle Datensätze aus irgendeinem September oder
Select ... from tbl_... where Datumsfeld like '1.*.1977';
für alle Datensätze von einem Monatsersten im Jaht 1977. Der zu
verleichende String ('*.9.*', '1.*.1977') steht in einer Variablen.
Geht das überhaupt? Und wenn ja, wie?
...WHERE CAST(Datumsfeld) like '1.*.1977'...
--
Joachim Dürr
Advantage Database Server Support Lead (EMEA)
Advantage[at]extendsys.de
Christoph Juengling
2005-06-22 06:47:05 UTC
Permalink
Post by Joachim Duerr
...WHERE CAST(Datumsfeld) like '1.*.1977'...
Das "*" ist auf dem SQL-Server ein "%" (beliebige Zeichenfolge), und der
cast() müsste doch noch ein "as <typ>" enthalten, oder täusche ich mich
da?

Chris
--
Wer zu spät kommt, den bestraft das Leben. [Gorbatschow]
Wer zu spät geht, den bestraft der Ehemann. [Weisheit]
Wer zu früh kommt, den bestraft die Ehefrau [Weisheit #2]
Wer zu Früh kommt, bleibt [Werbung]
stefan hoffmann
2005-06-21 12:28:59 UTC
Permalink
tach,
Post by r***@gmx.de
es wäre schön, wenn mir jemand da draußen unter die Arme greifen
könnte.
Bei dem Wetter? Igitt.
Post by r***@gmx.de
Select ... from tbl_... where Datumsfeld like '1.*.1977';
Geht das überhaupt? Und wenn ja, wie?
Genau so. Berücksichtigen mußt du zwei Punkte:

1) % ist der Platzhalter für beliebige Zeichenfolgen.
2) LIKE konvertiert implizit DATETIME nach CHAR/VARCHAR im Defaultdatum
(Amerikanisch).

Also:
SELECT *
FROM pubs..titles
WHERE CONVERT(varchar, pubdate, 104) LIKE '%09%'


mfG
--> stefan <--
--
Access-FAQ http://www.donkarl.com/
KnowHow.mdb http://www.freeaccess.de
Newbie-Info http://www.doerbandt.de/Access/Newbie.htm
r***@gmx.de
2005-06-23 08:46:11 UTC
Permalink
Danke allen für die Hilfe. Der Tipp (igittigitt, mit Doppel-P) mit dem
CONVERT(varchar, pubdate, 104) war goldrichtig.

Ruben Becker
Bernd Eckenfels
2005-06-23 18:19:55 UTC
Permalink
Post by r***@gmx.de
Danke allen für die Hilfe. Der Tipp (igittigitt, mit Doppel-P) mit dem
CONVERT(varchar, pubdate, 104) war goldrichtig.
Wobei MONTH() hier geschickter ist, kein Pattern Vergleich uns besser lesbar "MONTH(pubdate)=9"

Gruss
Bernd

Peter Lange
2005-06-21 12:37:55 UTC
Permalink
Post by r***@gmx.de
Guten Tag,
Hallo,
Post by r***@gmx.de
es wäre schön, wenn mir jemand da draußen unter die Arme greifen
könnte.
Ich greife aus PHP über ODBC auf einen MS-SQL-Server zu. Dabei soll es
möglich sein, nach Datumsfragmenten zu suchen, also z.B.
Select ... from tbl_... where Datumsfeld like '*.9.*';
Ohne jetzt den MS-SQL-Server zu kennen, gibt es da Funktionen wie
MONTH(), YEAR() etc?

Also SELECT ... FROM tbl_... WHERE MONTH(Datumsfeld) = 9;
Post by r***@gmx.de
für alle Datensätze aus irgendeinem September oder
Select ... from tbl_... where Datumsfeld like '1.*.1977';
für alle Datensätze von einem Monatsersten im Jaht 1977. Der zu
verleichende String ('*.9.*', '1.*.1977') steht in einer Variablen.
Geht das überhaupt? Und wenn ja, wie?
Zweite Möglichkeit: Du machst einen View, Castes das Datumsfeld in einen
String, und fragst wie oben mit Platzhaltern ab. Welche genau das bei
MS-SQL sind ('*' oder '%') sollte in der Doku stehen.

CREATE VIEW v_... AS SELECT ... , CAST(Datumsfeld AS CHAR) AS DATUM FROM
tbl..

SELECT DATUM FROM v_... WHERE DATUM LIKE '01.%.1977'
Post by r***@gmx.de
Danke im Voraus für die Mühe
hth
Peter Lange
Loading...