2009-02-11 5 views

Répondre

4

Sauf si vous étendez sqlite avec votre propre custom function, vous devrez faire ceci est le code.

Date de sqlite strftime fonction de formatage ne supporte qu'un petit sous-ensemble de son homologue C, insuffisant pour votre problème. sqlite manque également une construction de sélection comme IF ou CASE, rendant simple si/sinon impossible.

4

Certains pseudo-code pour vous aider sur le chemin:

if (hourpart of time >= 12) 
    subtract 12 from hours 
    append string " pm" 
else // hourpart < 12 
    append string " am" 
end if 

Dans SQL vous pouvez accomplir cela en utilisant la syntaxe CASE.


Après avoir regarder de plus près le problème:

SELECT (CASE HOUR(myTimeColumn) >= 12 WHEN 1 THEN 
     ((HOUR(myTimeColumn) - 12) + '-' + MINUTE(myTimeColumn) + ' pm') 
     ELSE 
     (HOUR(myTimeColumn) + '-' + MINUTE(myTimeColumn) + ' am') 
     AS AmPmTime, 
     someOtherColumn 
FROM myTable 

Je ne suis pas tout à fait sûr que tout cela est valide la syntaxe de SQLite, mais vous devriez être en mesure de corriger les bugs.

1

Faites-le dans votre application. Stockez-le au format 24h normal dans la base de données. Dans la base de données, il peut être stocké comme une entrée Date au lieu d'une chaîne (corrigez-moi si je me trompe)

2

Il y a quelques situation particulière qui sont couverts ici. J'utilise 'maintenant' comme source, mais vous pouvez le régler pour votre chaîne:

select 
    CASE 
    --For 00:05, for example. 
    WHEN (strftime('%H', 'now', 'localtime') - 12) = -12 
    THEN '12:' || strftime('%M', 'now', 'localtime') ||' '|| 'AM' 
    --For 12:05, for example. 
    WHEN (strftime('%H', 'now', 'localtime') - 12) = 0 
    THEN '12:' || strftime('%M', 'now', 'localtime') ||' '|| 'PM' 
    --other am time 
    WHEN (strftime('%H', 'now', 'localtime') - 12) < 0 
    THEN strftime('%H', 'now', 'localtime') ||':'|| 
    strftime('%M', 'now', 'localtime') ||' '|| 'AM' 
    ELSE 
    --other pm time 
    (cast(strftime('%H', 'now', 'localtime') as integer) - 12) ||':'|| 
    strftime('%M', 'now', 'localtime') ||' '|| 'PM' 
    END here_you_go_usa; 
0

est ici un de travail un .. Merci à Tomas

SELECT 
    PatientName, 
    CASE WHEN 
     StrFTime('%H', AppointmentTime) % 12 = 0 THEN 12 
     ELSE StrFTime('%H', AppointmentTime) % 12 END 
    || ':' || 
     StrFTime('%M', AppointmentTime) 
    || ' ' || 
    CASE WHEN 
     StrFTime('%H', AppointmentTime) > 12 THEN 'PM' 
     ELSE 'AM' END 
    `APP_TIME` 
From Patients;  

SORTIE
Abdul Salim, 12:05 PM

Questions connexes