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
Kommentar vom Moderator Biber am 19.03.2010 um 13:33:31 Uhr
Auf "Erledigt" gesetzt.
GELÖST

Zahlen in Datum umwandeln in Tabelle

Frage Entwicklung Datenbanken

Mitglied: dondy

dondy (Level 1) - Jetzt verbinden

17.03.2010, aktualisiert 19.03.2010, 9616 Aufrufe, 11 Kommentare

Hallo zusammen,

ich lasse eine Tabelle über eine TXT-Datei befüllen, in der es zwei Datumsfelder gibt. Leider hat das Datum in der TXT-Datei folgendes Format: 771203.
Mit welchem Statement kann ich den Zahlenwert in der Tabelle wie folgt umwandeln?

771203 --> 03.12.1977

Ich verwenden einen SQL2005 Standard Server. Ich kann auf dem System leider nicht mit anderen Mitteln als mit SQL-Statements arbeiten.

Kennt jemand eine Lösung?
Mitglied: Biber
17.03.2010 um 13:59 Uhr
Moin dondy,

habe deine Anforderung nur teilweise verstanden.
Deshalb die Nachfragen:

  • ich gehe hoffentlich fehl in der Annahme, dass du die Übernahme der beiden YYMMDD-Zeichenfelder aus der Textdatei in die DB-Tabelle beibehalten willst und redundant die Werte nochmals in derselben Tabelle alls Datumswert speichern willst?
  • deshalb die Anschlussfrage: willst du also das Ganze beim Import glattziehen - if so, wie heißen Quelle, Zieltabelle, Felder, Import-Statement...?
  • Wenn aber Import-Mimik unangetastet bleiben soll/muss, also nur ein View zusammengeschrotet werden soll: wie heißen Tabelle, Felder...?

Grüße
Biber
Bitte warten ..
Mitglied: dondy
17.03.2010 um 14:07 Uhr
Hi Biber,

die TXT-Datei wird so wie sie ist in eine Tabelle gepackt, ohne Umwandlung. Von dieser Tabelle soll es dann in eine weitere Tabelle gehen. Die Umwandlung soll beim Import in die zweite Tabelle erfolgen.
Der Grund für die erste Tabelle ist, dass ein anderes Programm genau diese Tabelle benötigt und deshalb die Daten "redundant" vorliegen.

Ich stelle mir irgendwie sowas vor:

select datum from tabelle1
into tabelle2
convert datum 771203 --> 03.12.1977
Bitte warten ..
Mitglied: it-frosch
17.03.2010 um 14:08 Uhr
Hallo dondy,

schon mal mit update table set datum_neu=rechts(datum,1,2)||"."||links(datum,5,2)||".19"||links(datum,1,2) probiert.

Du musst die Idee aber noch in die richtige Syntax umbauen.
Bitte warten ..
Mitglied: dondy
17.03.2010 um 14:53 Uhr
Hallo,

ja genau sowas habe ich gesucht, es funktioniert auch, fast.
Wie kann ich den funktionen right und left sage, dass sie nicht die zeichen 0 bis 6 nehmen sollen, sondern zum beispiel die zahlen an stelle 5 UND 6?
Bitte warten ..
Mitglied: Biber
17.03.2010 um 15:16 Uhr
Moin dondy,

Zitat von dondy:
Wie kann ich den funktionen right und left sage, dass sie nicht die zeichen 0 bis 6 nehmen sollen, sondern zum beispiel die zahlen an stelle 5 UND 6?
Dafür wiederum wäre die skalare Funktion SUBSTRING bei M$-SQL zuständig.
Eigentlich SUBSTRING(ausgangs_string [FROM start_position] [FOR laenge])
aber im täglichen Gebrauch meist angedeutet als SUBSTRING( ausgangs_string, start_position, laenge)

--> in deinem Fall also SUBSTRING(datum, 5, 2).

Grüße
Biber
Bitte warten ..
Mitglied: MadMax
18.03.2010 um 09:43 Uhr
Moin,

machen wir es doch nicht so kompliziert und nehmen einfach Datumskonvertierungen:
01.
select convert (varchar, convert (datetime, '771203', 12), 104)
Kleiner Nachtrag: läßt man das äußere convert weg, hat man auch das Format, in dem man sowas normal ablegt, datetime

Gruß, Mad Max
Bitte warten ..
Mitglied: Biber
18.03.2010 um 19:41 Uhr
Na ja, Mad Max,

schon richtig, aber...
....zwei Unwägbarkeiten dabei.
Erstens hast du bzw. dondy ja noch eine Konvertierung mehr - denn dieses Drexdatum liegt ja als "Zahl" vor, nicht als varchar().

Zweitens (aus meiner Sicht versteckter und deshalb gefährlicher).
Dieses verbotenerweise mit 2stelligen Jahreszahlen gespeicherte Datum hat eventuell ja irgendwelche internen Regeln und Konventionen, ab wann denn eine Jahreszahl wie in dem Beispiel "77" als "Jahr 1977" oder "Jahr 2077" interpretiert werden soll.

Mit einer Substring/Concat-Mimik kannst du das abbilden.... jeweils an der gleichen Sollbruchstelle eben eine "19" oder "20" als Jahrhundertwert davorschreiben.

Wenn du Convert(..6stelligeDatumsentsprechung...zu Datum TT.MM.JJJJ) aufrufst, dann wird die Sollbruchstelle von MSSQL genommen.

Sollte dondy wenigstens vorher wissen... der sucht sich sonst albern bei Dateninkonsistenzen.

@dondy
Ich bin immer wieder aufs Neue verblüfft, dass heute, Anno 2010, immer noch datenliefernde Systemchen unterwegs sind, die Datumswerte ohne Jahrhundertangaben exportieren.

Gab es nicht damals, vor 11 Jahren, diese Y2K-Zertifierung unter gar keinen Umständen für solchen Pfusch?

Grüße
Biber
Bitte warten ..
Mitglied: MadMax
19.03.2010 um 09:24 Uhr
Moinmoin,

Zitat von Biber:
Erstens hast du bzw. dondy ja noch eine Konvertierung mehr - denn dieses Drexdatum liegt ja als "Zahl" vor, nicht als
varchar().
Wenn ich das richtig gelesen habe, kommt das Ganze aus einer Textdatei, müßte deshalb erstmal als Text vorliegen. Wenn nicht, wird '771203' (bzw. die Variable/Spalte) einfach durch convert (varchar, 771203) ersetzt.

Zitat von Biber:
Zweitens (aus meiner Sicht versteckter und deshalb gefährlicher).
Dieses verbotenerweise mit 2stelligen Jahreszahlen gespeicherte Datum hat eventuell ja irgendwelche internen Regeln und
Konventionen, ab wann denn eine Jahreszahl wie in dem Beispiel "77" als "Jahr 1977" oder "Jahr 2077"
interpretiert werden soll.
Da hast Du natürlich recht, aber das ist ja erstmal ein Problem der zweistelligen Jahreszahlen. Bei SQL Server geht der Bereich standardmäßig von 1950 - 2049. Das kann man ggf. mit dateadd (yy, 100, <Datum>) bzw. dateadd (yy, -100, <Datum>) korrigieren. Oder noch geschickter, man ändert diesen Bereich durch:
01.
exec sp_configure 'show advanced options', 1 
02.
reconfigure 
03.
exec sp_configure 'two digit year cutoff', <Jahr>	-- <Jahr> = letztes Jahr des 100-Jahres-Bereichs, also z.B. 2029 fuer 1930 - 2029 
04.
exec sp_configure 'show advanced options', 0 
05.
reconfigure
Aber da sich dondy ja nicht mehr rührt, scheint sein Problem wohl eh erledigt zu sein.

Gruß, Mad Max
Bitte warten ..
Mitglied: Biber
19.03.2010 um 11:43 Uhr
Moin Mad Max,

Zitat von MadMax:
Moinmoin,

> Zitat von Biber:
> ----
> Erstens hast du bzw. dondy ja noch eine Konvertierung mehr - denn dieses Drexdatum liegt ja als "Zahl" vor, nicht als varchar().
Wenn ich das richtig gelesen habe, kommt das Ganze aus einer Textdatei, müßte deshalb erstmal als Text vorliegen.
Sagen wir so - vielleicht ist es besser, lieber gar nicht so genau den ganzen Ablauf zu hinterfragen...
Wenn ich es richtig gelesen haben, dreht er noch eine Extra-Schleife "die TXT-Datei wird so wie sie ist in eine Tabelle gepackt, ohne Umwandlung".
Wobei dieses "ohne Umwandlung" aber im weiteren Beitragsverlauf zu bedeuten scheint, dass dieses 6stellige Datumskrams als Zahl vorliegt.

Aber da sich dondy ja nicht mehr rührt, scheint sein Problem wohl eh erledigt zu sein.
Hmmja, ist mir auch nicht entgangen, dass er ein wenig stiller geworden ist in letzter Zeit.
Andererseits fände ich es viel zu schade, diesen Beitrag wegen fehlender Rückmeldung in die Tonne zu kloppen.
Soll ich mal einfach einen Erledigt-Haken dransetzen? *grübel* [Edit] nach kurzer Bedenkzeit getan. [/Edit]

Gruß, Mad Max
Grüße zurück
Biber
Bitte warten ..
Mitglied: MadMax
19.03.2010 um 12:35 Uhr
Keine Rückmeldung ist ja auch eine Art Rückmeldung. Insofern wäre das Problem wohl gelöst. Anregungen bzw. Anleitungen, wie es geht, stehen jedenfalls gleich mehrere hier.

Schönes Wochenende,
Mad Max
Bitte warten ..
Mitglied: it-frosch
19.03.2010 um 19:34 Uhr
@Biber
@Mad Max

danke euch beiden für die schönen Anregungen zu dem Thema.
Genau deshalb lese ich hier.

Schönes WE noch.
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Datum in einer CSV datei in Tage umwandeln (13)

Frage von nolle99 zum Thema Batch & Shell ...

Windows 10
gelöst Windows 10 - Datum und Zeitfehler bei Update (3)

Frage von swisstom zum Thema Windows 10 ...

Microsoft Office
Pivot Tabelle schützen ohne Datenabschnitt (1)

Frage von lupi1989 zum Thema Microsoft Office ...

Windows Userverwaltung
gelöst Datum einer Gruppenmitgliedschaft (1)

Frage von slansky zum Thema Windows Userverwaltung ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Router & Routing
gelöst Empfehlung günstiges ADSL2+ nur Modem (10)

Frage von TimMayer zum Thema Router & Routing ...

Server-Hardware
Lenovo Server System X 3650 M5 Festplatten (9)

Frage von Hendrik2586 zum Thema Server-Hardware ...