Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

MSSQL Records zwischen Gestern Mitternacht und Heute Mitternacht

Frage Entwicklung Datenbanken

Mitglied: solaris-ch

solaris-ch (Level 1) - Jetzt verbinden

18.09.2008, aktualisiert 19.09.2008, 10365 Aufrufe, 9 Kommentare

MSSQL 2003

Hallo liebe Admins!

Wieder einmal ich, und wieder einmal ein MSSQL Problem...

Wir wollen eine Table von einem MSSQL System auf ein MySQL System spiegeln. Einmal am Tag.
Nun wollen wir dies via einem in der MSSQL Table vorhandenen Timestamp realisieren.

Alle Records, welche zwischen Gestern 00:00:00 und Heute 00:00:00 in der Tabelle sind, sollen in ein Textfile geschrieben werden, welches dann importiert wird. Das mit dem Textfile ist auch eine Zangengeburt, geht aber mittlerweile. Nur das Selektieren der Records gelingt uns nicht.

Beispiel:

(Pseudo Code)

SELECT *
FROM
db.user.tbl
WHERE
TimeStamp BETWEEN '2008-09-17 00:00:00' and '2008-09-18 00:00:00'

Anders, vielleicht einfacher ausgedrückt:
Wir wollen alle Records eines Tages.
Und zwar vom vergangenen Tag.
Keine Records vom aktuellen Tag.

Und genau dort hängts bei uns... jemand ne Idee?

Besten Dank für Eure Hilfe!
Mitglied: Biber
18.09.2008 um 16:49 Uhr
Moin solaris-ch,

ich habe eigentlich im moment nur zwei Probleme.
- ich verstehe Deine Frage/Dein problem nicht wirklich
- und ich spreche kein mySQL
... aber in der Tendenz würder ich es so abfackeln, bis mir etwas ästhetisches einfällt:
01.
SELECT deitab.* 
02.
FROM 
03.
db.user.tbl deitab 
04.
WHERE 
05.
 Date(deitab,DeinTimeStamp) = Date_ADD(CURDATE(), INTERVAL -1 DAY)
---> Date(DeinTimeStamp) sollte die Uhrzeit-Detailangabe aus dem Timestamp entfernen
---> CurDate() liefert nur Datum "heute" ohne Uhrzeit
--> "heute" abzüglich 1 Tach sollte "gestern" ebenfallls im Format ohne Uhrzeit liefern.

Grüße
Biber
Bitte warten ..
Mitglied: solaris-ch
18.09.2008 um 16:55 Uhr
Hi Biber!

Du hast mich effektiv nicht verstanden

Ich suche nicht den Code für mYsql, sondern für mSsql...
Bei MSSQL gibts kein CURDATE, INTERVAL geht so auch nicht...

In MySQL wüsste ich auch wie ich das Problem lösen kann. Aber eben nicht so in MSSQL...
Und ich muss die Daten aus MSSQL raus spoolen.

Gruss
Bitte warten ..
Mitglied: VW
18.09.2008 um 17:31 Uhr
Moin,

du kannst doch, wie in Excel, mit größer als (>) und kleiner als (<) arbeiten, oder?

Dann wäre dein Statement von oben in etwa:
01.
SELECT * 
02.
FROM 
03.
db.user.tbl 
04.
WHERE 
05.
TimeStamp > '2008-09-17 00:00:00' AND TimeStamp < '2008-09-18 00:00:00'
Ich kann dir allerdings so nicht sagen, in welchem Format du den Timestamp ansprechen musst, da ich außer in einer (qualitativ nicht so hochwertigen) Schulung noch kein MSSQL angewendet habe.

Habe nur SQL-Erfahrung aus Firebird-Datenbanken. Und das auch nur aus der Schule aus dem Unterricht.

Mit freundlichen Grüßen,
VW
Bitte warten ..
Mitglied: bastla
18.09.2008 um 21:08 Uhr
Hallo solaris-ch!

Vielleicht so:
01.
WHERE CONVERT(VARCHAR(8), TimeStamp, 112) = CONVERT(VARCHAR(8), GETDATE() - 1, 112)
Grüße
bastla
Bitte warten ..
Mitglied: Biber
18.09.2008 um 22:20 Uhr
Moin solaris-ch,

In den MSDN-BOL steht:
The SQL-2003 timestamp data type is equivalent to the Transact-SQL datetime data type.

demnach sollte bastlas CASTerei funktionieren.

Grüße
Biber
Bitte warten ..
Mitglied: solaris-ch
19.09.2008 um 09:00 Uhr
Hi Bastla

besten Dank für deine Hilfe! Dieser Weg funktioniert... wenn auch mit enormen Performance - Gelüsten aufgrund des Casterei.

Vielen Dank!
Bitte warten ..
Mitglied: MadMax
19.09.2008 um 13:15 Uhr
Moin solaris-ch,

das Thema ist zwar als erledigt markiert, aber hier noch ein Hinweis, wie Du die "enormen Performance - Gelüste" etwas einschränken kannst. Die liegen nämlich nicht an den Converts an sich, sondern speziell an dem Convert auf den Timestamp. Wenn also nur die Vergleichswerte konvertiert werden, geht es schneller. Das kann dann etwa so aussehen:
01.
declare @Datum datetime 
02.
select @Datum = convert (datetime, convert (varchar (20), getdate (), 112), 112) 
03.
select * from db.user.tbl 
04.
where TimeStamp >= dateadd (d, -1, @Datum) and TimeStamp < @Datum
Gruß, Mad Max
Bitte warten ..
Mitglied: solaris-ch
19.09.2008 um 13:32 Uhr
Das geht ja echt fix! Besten Dank! Ist mindestens 10 mal schneller wie die erste Variante!

Vielen Dank an dich!

Gruss
Bitte warten ..
Mitglied: bastla
19.09.2008 um 13:40 Uhr
Hallo Mad Max!

Hast natürlich völlig recht ...

Vielleicht noch effizienter:
01.
declare @Datum datetime 
02.
declare @Datum1 datetime 
03.
select @Datum = convert (datetime, convert (varchar (20), getdate (), 112), 112) 
04.
select @Datum1 = dateadd (d, -1, @Datum) 
05.
select * from db.user.tbl 
06.
where TimeStamp >= @Datum1 and TimeStamp < @Datum
Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Humor (lol)
Der Unterschied zwischen USA und USB

Link von BirdyB zum Thema Humor (lol) ...

Windows Server
AD Replikation zwischen untergeordneten Domäne zwingend? (4)

Frage von Gien-app zum Thema Windows Server ...

Microsoft Office
Button für Wechseln zwischen den Tabellenblättern (6)

Frage von lupi1989 zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...