Puncte:0

SQL Conversia șirurilor în prezent

drapel us

acest lucru m-a derutat de câteva zile și caut ajutor. Folosesc SQL Server 2017.

Încerc să gestionez șirurile dintr-un câmp de format liber și fie să le convertesc într-o dată în formatul „zz/ll/aaaa” sau dacă nu sunt în acest format, afișează pur și simplu textul text.

Am nevoie de asta într-un VIEW, așa că nu pot folosi SET LANGUAGE. Sună simplu de utilizare convertit și isdata dar nu pare să funcționeze.

Deci, pentru fragmentul de cod de mai jos (amintiți-vă că acesta va fi într-o VIEW) vreau să citesc textul și dacă șirul se convertește într-o dată (de ex.este în formatul „zz/ll/aaaa”, apoi executați conversia la o dată, deoarece am nevoie de ea în format de dată pentru ca Excel să o ridice (prin intermediul bazei de date Connect SQL Server)), iar dacă nu se convertește la o dată, atunci afișați textul așa cum este.

creați tabelul dataTest1 
( idx int, 
 dateStringTest varchar(15) 
); 
  
inserați în dateTest1 (idx, dateStringTest) 
valori (1, '13/01/2021'), (2, 'nu'); 
 
 
Selectați 
       cazul când isdate(convert(datetime, dateStringTest, 103)) = 1 
       apoi convertiți(datetime, dateStringTest, 103)
       else dateStringTest 
       termina ca dtres
de la dataTest1 
--unde idx = 1 
  
-- eroare: Msg 241, Level 16, State 1, Line 15 Conversia a eșuat la conversia datei și/sau a orei din șirul de caractere. 
-- această eroare se întâmplă pentru idx = 2. Idx = 1 funcționează ok

Orice ajutor cu acest lucru ar fi foarte apreciat, deoarece îmi face capul.

Mulțumesc anticipat Paul

Puncte:1
drapel cn

Nu sunt sigur cât de potrivită este baza ta de date pentru a face acest lucru. Funcțiile de conversie a datelor din SQL Server sunt puțin „stângace”, în comparație cu altele.

Cu toate acestea, din punctul de vedere al bazei de date:

Dacă ceva este presupus a fi un Data, atunci acesta ar trebui să fie o intalnire.
Ar putea fi „lipsă” (adică nu poate fi anulată), dar nu poate fi nimic altceva.
Daca au fost pentru a fi altceva, atunci nu trebuie tratat la fel de A Data.

Utilizatorii nu pot intra Datele - doar Reprezentări de caractere dintre ei.
Afișarea [numerelor și] datelor din aplicația dvs. necesită formatare la „ieșire”.
Citirea [numerelor și] datelor în aplicația dvs. necesită invers, „de-formatarea” (și validarea, desigur) la „modul de intrare”.
Datele ar trebui mereu fi stocat în corect Tip de date - „Instrumentul potrivit pentru locul de muncă potrivit”.

Parsarea textului liber este probabil Cel mai bine se face în aplicația dvs., extragerea valorii datei, validând-o și „deformatând” și apoi stocând-o.

Michael Hampton avatar
drapel cz
Vă rugăm să încercați să evitați să răspundeți la întrebări în afara subiectului.
Phill  W. avatar
drapel cn
Răspunsul la întrebare este un lucru. Îndrumarea posterului pentru a pune la îndoială întrebarea poate fi adesea mai bună, deoarece poate încerca să rezolve problema /greșită/. Nu consider ca „în afara subiectului” să-i îndepărtez pe oameni de [la dreptate] practicile rele care / vor/ reveni și îi vor mușca mai târziu. Gestionarea datei este destul de dificilă, așa cum este atunci când știi că lucrezi cu o întâlnire. Adăugarea de dacă și dar și poate despre dacă ceea ce cauți este o întâlnire sau nu te va duce pe tine și baza ta de date la nebunie.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.