SQL Compact When len('ABC')

SQL Compact When len('ABC')
2015-02-06T13:45:31+01:00
2015-02-09T09:12:01+01:00
2022-12-02T03:55:38+01:00
joberhau2
Sziasztok!


SQL Compact 3.5-ben szeretném,ha ez működne:

SELECT CASE WHEN LEN('ABCD')<5 THEN (SELECT 'ABCD' + SPACE(5-LEN('ABCD'))) ELSE (SELECT 'ABCD') END



Annyit szeretnék megoldani, hogy ha 'ABCD' karakterek száma < 5 akkor tegyen mögé annyi Space-t,amennyi a kettő közötti különbség.
SQL Server2008 R2 alatt símán lefut. :(
Mutasd a teljes hozzászólást!
Szóval a kódot csak példaként írtam.

Ez oké lenne, ha a példa fedné a kérdésedet!

Ez meg azért nem jó nekem, mert nem tudom,hogy milyen hosszú lesz a stringem.

A nyitó kérdésben még valóban nem tudod, mert ott < szerepel a feltételben, most meg =. Ha a feltétel az, hogy a sztring hossza =4, akkor végképp nem értem a kérdést,  mert a sztring hossza 4 lesz, tehát mindig 8 szóközt kell hozzáadni.

De ha nem tudnád a sztring hosszát, akkor is a substring('ABCD' + SPACE(12),1,12) képlet jó lenne, hiszen azt szeretnéd, hogy legyen egy 12 karakter hosszú sztringed, aminek az első x karaktere abcd a többi meg szóköz. A fenti képlet azt csinálja, hogy az abcd sztringhez hozzáfűz fixen 12 szóközt,  majd veszi ennek az új sztringnek az első 12 karakterét. De ha nekem nem hiszel, miért nem próbálod ki?
Mutasd a teljes hozzászólást!

  • Mi a hibajelenség?

    Amúgy rövidebben:
    select left('ABCD', + replicate(' ', 5), 5)
    Mutasd a teljes hozzászólást!
  • Ivn kódja röviden megoldja, amit szeretnél. Nálad szvsz az a gond, hogy a case-en belül is select-eket használsz. Nem kéne.

    SELECT CASE WHEN LEN('ABCD')<5 THEN 'ABCD' + SPACE(5-LEN('ABCD')) ELSE 'ABCD' END ...
    Mutasd a teljes hozzászólást!
  • Szia!

    Major Error 0x80040E14, Minor Error 25501
    > SELECT CASE WHEN LEN('ABCD')=4 THEN (SELECT 'ABCD' + SPACE(10)) ELSE (SELECT 'ABCD') END
    There was an error parsing the query. [ Token line number = 1,Token line offset = 38,Token in error = SELECT ]



    Major Error 0x80040E14, Minor Error 25501
    > select left('ABCD', + replicate(' ', 5), 5)
    There was an error parsing the query. [ Token line number = 1,Token line offset = 8,Token in error = left ]
    Mutasd a teljes hozzászólást!
  • left és replicate helyett substring('ABCD' + SPACE(5),1,5)
    Mutasd a teljes hozzászólást!
  • Valami ilyen kellene:

    SELECT CASE WHEN LEN('ABCD')=4 THEN substring('ABCD' + SPACE(LEN('ABCD')),1,5) ELSE  (SELECT 'ABCD') END
    Mutasd a teljes hozzászólást!
  • Bocsi, de ezt a kódodat még értelmezni sem tudom! Mi a bajod a substring('ABCD' + SPACE(5),1,5) változattal? Vagy mi a gond az eredeti kódodban a select kiiktatásával a case-en belül?
    Mutasd a teljes hozzászólást!
  • Az a baj,hogy az MS SQL compact egy f...s.

    Szóval a kódot csak példaként írtam.

    Az akarom vizsgálni,hogy ha a string hosszúsága egyenlő 4-el, akkor a hozzáadandó space-k száma= 12- a stringem hossza hosszúsága.

    Kódban ez így néz ki (sql 2008 R2):

    SELECT CASE WHEN LEN('ABCD')=4 THEN (SELECT 'ABCD' + SPACE(12-LEN('ABCD'))) ELSE (SELECT 'ABCD') END

    De talán így értelmezhetőbb:

    DECLARE @length int, @String varchar(50) SET @String='ABCD' SET @length=LEN(@String) IF @length=4 SELECT @String+SPACE(@length) ELSE SELECT @String

    Sajnos a SQL Compact ezt így nem tudja.
    Te meg szerintem így gondoltad:

    SELECT CASE WHEN LEN('ABCD')=4 THEN substring('ABCD' + SPACE(5),1,5) ELSE 'ABCD' END
    Ez meg azért nem jó nekem, mert nem tudom,hogy milyen hosszú lesz a stringem.

    Tehát valahogy így lenne jó:

    SELECT CASE WHEN LEN('ABCD')=4 THEN substring('ABCD' + SPACE(12-LEN('ABCD')),1,LEN('ABCD')) ELSE 'ABCD' END Vagy nem értem a substringet. :)
    Mutasd a teljes hozzászólást!
  • Szóval a kódot csak példaként írtam.

    Ez oké lenne, ha a példa fedné a kérdésedet!

    Ez meg azért nem jó nekem, mert nem tudom,hogy milyen hosszú lesz a stringem.

    A nyitó kérdésben még valóban nem tudod, mert ott < szerepel a feltételben, most meg =. Ha a feltétel az, hogy a sztring hossza =4, akkor végképp nem értem a kérdést,  mert a sztring hossza 4 lesz, tehát mindig 8 szóközt kell hozzáadni.

    De ha nem tudnád a sztring hosszát, akkor is a substring('ABCD' + SPACE(12),1,12) képlet jó lenne, hiszen azt szeretnéd, hogy legyen egy 12 karakter hosszú sztringed, aminek az első x karaktere abcd a többi meg szóköz. A fenti képlet azt csinálja, hogy az abcd sztringhez hozzáfűz fixen 12 szóközt,  majd veszi ennek az új sztringnek az első 12 karakterét. De ha nekem nem hiszel, miért nem próbálod ki?
    Mutasd a teljes hozzászólást!
  • Bakker, igazad van! Köszi!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd