Mijn SQL-code toont 00 in plaats van 12 AM. Hoe kan ik dit aanpassen?

Ik heb de volgende code die goed voor me werkt. Ik gebruik het in een SSIS-pakket in SQL. Het probleem dat ik heb is dat tussen middernacht en 01:00 uur het uur wordt weergegeven als 00. Ik zou graag zoveel mogelijk bij de volgende code willen blijven, omdat het voor mij werkt, maar maak gewoon de benodigde aanpassing . Alle hulp zou zeer gewaardeerd worden !!!

Dank je, John

    SELECT     CASE WHEN DATEPART(hour, DateTimeField) < 13 THEN 
    RIGHT(REPLICATE(' ', 2) + CAST(datepart(hour, DateTimeField) AS VARCHAR(2)), 2) 
    ELSE 
    RIGHT(REPLICATE(' ', 2) + CAST(datepart(hour, dateadd(hour, - 12, DateTimeField))
    AS VARCHAR(2)), 2) END
1

2 antwoord

Ik denk dat je dit in plaats daarvan gewoon zou kunnen doen:

SELECT SUBSTRING(CONVERT(CHAR(14), DateTimeField, 100), 13, 2)
3
toegevoegd
Houd er ook rekening mee dat omdat dit deel uitmaakt van een groter stuk code (zo lijkt het) u mogelijk de hele partij kunt vervangen door een beter gebruik van de functie CONVERT .
toegevoegd de auteur Tom H, de bron
@John: Ja. Deze code moet alle code vervangen die u in uw vraag hebt gepost.
toegevoegd de auteur Joe Stefanelli, de bron
@John CONVERT met stijl 100 produceert mon dd yyyy hh : miAM (of PM) . Door te converteren naar CHAR (14), heb ik alleen de eerste 14 tekens mon dd yyyy hh . Vervolgens verwijdert de functie SUBSTRING alleen het gedeelte hh .
toegevoegd de auteur Joe Stefanelli, de bron
Oké, ik zal dit proberen! Dus deze code zal alle code vervangen die ik momenteel gebruik? Ik zal je heel snel laten weten hoe het komt. Dank je!
toegevoegd de auteur John, de bron
Goed punt! Ik zal dit in een ogenblik kunnen testen. Het is zeker een stuk schoner dan de manier waarop ik het deed, en ja, dat was slechts een deel van een grotere code. Dank je!
toegevoegd de auteur John, de bron
Dit werkte perfect! Dank je! Ik begrijp deze codering niet helemaal, maar ik zal er wat meer naar doen, voor toekomstige behoeften zoals deze. Ik waardeer dat!
toegevoegd de auteur John, de bron
Dank je! Dat is goed om te weten.
toegevoegd de auteur John, de bron

Uitgaande van Oracle, omdat u niet hebt opgegeven. De algemene techniek is om de functie TO_CHAR en een datumconversiesjabloon te gebruiken die 01-12 in plaats van 00-23 toestaat.

select to_char(sysdate, 'HH:MI:SS AM') from dual;

select to_char(sysdate, 'HH24:MI:SS') from dual;
0
toegevoegd
Het spijt me, het is SQL 2008
toegevoegd de auteur John, de bron