![]() | |
#1
| |||
| |||
|
#2
| |||
| |||
|
#3
| |||
| |||
|
|
Sandeep, If I am not wrong, existing Timestamp_format function is not helping you. |
#4
| |||
| |||
|
#5
| |||
| |||
|
|
| TRANSLATE('AB:CD',DIGITS(CURRENT_TIMEZONE),'ABCDEF ')) |
#6
| |||
| |||
|
|
You wrote "%p Locale's equivalent of either AM or PM." in "Template Meaning". But you coded it as %P and in "Some examples of usage:" you showed STRFTIME('%I:%M:%S %P') = '11:58:57 PM' Which is right? |
#7
| |||
| |||
|
|
Here is another trial for the function. I used %p for AM or PM. CREATE FUNCTION STRFTIME_N(AFORMAT VARCHAR(100), ATIMESTAMP TIMESTAMP) RETURNS VARCHAR(100) SPECIFIC STRFTIME_N LANGUAGE SQL DETERMINISTIC NO EXTERNAL ACTION CONTAINS SQL RETURN REPLACE( REPLACE( [...snipped lots of REPLACE calls...] |
|
, '%Z', SUBSTR('-++',2+INT(SIGN(CURRENT_TIMEZONE)),1) || TRANSLATE('AB:CD',DIGITS(CURRENT_TIMEZONE),'ABCDEF ')) , '%%', '%'); |
#8
| |||
| |||
|
|
Consider the format: '%%p' Which ought to result in the string '%p'. In your version of the function, %p get's substitution before %% so initially you wind up with '%PM' or possibly '%AM'. |
|
| TRANSLATE('AB:CD',DIGITS(CURRENT_TIMEZONE),'ABCDEF ')) |
#9
| ||||
| ||||
|
|
Consider the format: '%%p' Which ought to result in the string '%p'. In your version of the function, %p get's substitution before %% so initially you wind up with '%PM' or possibly '%AM'. How about first change '%%' to a character which usually is not used(I tried CHR(1)). And, I changed REPLACE sequence. Put first characters which there are possibility to be produced by %A', DAYNAME(ATIMESTAMP) and '%B', MONTHNAME(ATIMESTAMP) before them.(In English) |
|
DROP FUNCTION STRFTIME_N; CREATE FUNCTION STRFTIME_N(AFORMAT VARCHAR(100), ATIMESTAMP TIMESTAMP) RETURNS VARCHAR(100) SPECIFIC STRFTIME_N LANGUAGE SQL DETERMINISTIC NO EXTERNAL ACTION CONTAINS SQL RETURN REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(AFORMAT, '%%', CHR(1)) , '%M', SUBSTR(DIGITS(MINUTE(ATIMESTAMP)),9,2)) , '%W', SUBSTR(DIGITS(WEEK_ISO(ATIMESTAMP)),9,2)) , '%S', SUBSTR(DIGITS(SECOND(ATIMESTAMP)),9,2)) , '%A', DAYNAME(ATIMESTAMP)) , '%B', MONTHNAME(ATIMESTAMP)) , '%c', CHAR(DATE(ATIMESTAMP),LOCAL) ||' '|| CHAR(TIME(ATIMESTAMP),LOCAL)) , '%d', SUBSTR(DIGITS(DAY(ATIMESTAMP)),9,2)) , '%h', SUBSTR(CHAR(QUARTER(ATIMESTAMP)/2),1,1)) , '%H', SUBSTR(DIGITS(HOUR(ATIMESTAMP)),9,2)) , '%I', SUBSTR(DIGITS(MOD(HOUR(ATIMESTAMP)+11,12)+1),9,2)) , '%j', SUBSTR(DIGITS(DAYOFYEAR(ATIMESTAMP)),8,3)) , '%m', SUBSTR(DIGITS(MONTH(ATIMESTAMP)),9,2)) , '%p', SUBSTR('AMPM',1+HOUR(ATIMESTAMP)/12*2,2)) |
|
, '%q', SUBSTR(CHAR(QUARTER(ATIMESTAMP)),1,1)) , '%U', SUBSTR(DIGITS(WEEK(ATIMESTAMP)),9,2)) , '%w', SUBSTR(CHAR(DAYOFWEEK(ATIMESTAMP)),1,1)) , '%x', CHAR(DATE(ATIMESTAMP),LOCAL)) , '%X', CHAR(TIME(ATIMESTAMP),LOCAL)) , '%y', SUBSTR(DIGITS(YEAR(ATIMESTAMP)),9,2)) , '%Y', SUBSTR(DIGITS(YEAR(ATIMESTAMP)),7,4)) , '%Z', SUBSTR('-++',2+INT(SIGN(CURRENT_TIMEZONE)),1) || TRANSLATE('AB:CD',DIGITS(CURRENT_TIMEZONE),'ABCDEF ')) , CHR(1), '%'); |
|
Some result examples: '%I:%M:%S %p' => 11:48:08 AM '%I:%M:%S %%p' => 11:48:17 %p '%I:%M:%S %%%p' => 11:48:24 %AM '%I:%M:%S %%%%p' => 11:48:35 %%p '%I:%M:%S %%%%%p' => 11:48:49 %%AM '%qQ%y' => 2Q06 |
#10
| |||
| |||
|
![]() |
| Thread Tools | |
| Display Modes | |
| |