DatistEQ之F函数
字符串格式显示是数据专家中的常用的功能之一。F函数是为了替代format();原先赋值需要占位符和变量,当需要拼接多个变量会造成语句过长等不易理解问题, F函数可以把字符串中的变量{}包含起来达到变量的目的F("{id}");也支持表达式,使用F("{表达式}")。
F函数使用格式为:
F('{表达式1:格式参数1} {表达式2:格式参数2}')
例如:
F('包子{5+5:N2}元{3}个')
结果为 :包子10.00元3个
一、标准数字格式字符串[1]
标准数字格式字符串用于格式化通用数值类型。 标准数字格式字符串采用 Axx
的形式,其中:
-
A
是称为“格式说明符”的单个字母字符。 任何包含一个以上字母字符(包括空白)的数字格式字符串都被解释为自定义数字格式字符串。 -
xx
是称为“精度说明符”的可选整数。 精度说明符的范围从 0 到 99,并且影响结果中的位数。 请注意,精度说明符控制数字的字符串表示形式中的数字个数。 它不舍入该数字。 若要执行舍入运算,请使用 Ceil、Floor或 Round方法。当精度说明符控制结果字符串中的小数位数时,结果字符串会反映一个数字,该数字四舍五入到最接近无限精确结果的可表示结果。
下表介绍标准数字格式说明符并显示每个格式说明符产生的示例输出。
1、 “C”或“c”,格式化货币
跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元。默认格式化小数点后面保留两位小数,如果需要保留一位或者更多,可以指定位数。
类型支持:所有数值类型。
精度说明符:十进制小数位数。
例:
F('{123.456 :C}') 结果为 : ¥123.46(截取会自动四舍五入)
F('{-123.456 :C3}') 结果为 :¥-123.456
2、“D”或“d”,格式化十进制的数字
格式化成固定的位数,位数不能少于未格式化前,只支持整形。
类型支持:仅限整型类型。
精度说明符:数字位数下限。
例:
F('{1234 :D}') 结果为 : 1234
F('{-1234 :D6}') 结果为 : -001234
3、“E”或“e” , 指数(科学型),输出指数表示法。
类型支持:所有数值类型。
精度说明符:十进制小数位数。
例:
F('{1052.0329112756 :E}') 结果为 : 1.052033E+003
F('{1052.0329112756 :e}') 结果为 : 1.052033e+003
F('{1052.0329112756 :E2}') 结果为 :1.05E+003
F('{1052.0329112756 :e2}') 结果为 :1.05e+003
4、“F”或“f” ,小数位,输出整数和十进制小数。
类型支持:所有数值类型。
精度说明符:十进制小数位数。
例:
F('{1234.567 :F}') 结果为 :1234.57
F('{1234 :F1}') 结果为 :1234.0
F('{-1234.56 :F4}') 结果为 :-1234.5600
5、 “N”或“n” ,数字
用分号隔开的数字,并指定小数点后的位数。
类型支持:所有数值类型。
精度说明符:所需的小数位数。
例:
F('{1234.567:N}') 结果为 : 1,234.57(默认为小数点后面两位)
F('{1234:N1}') 结果为 :1,234.0
F('{-1234.2458 :N3}') 结果为 :-1,234.246 (自动四舍五入)
6、 “P”或“p” , 格式化百分比
结果:数字乘以 100 并以百分比符号显示。
类型支持:所有数值类型。
精度说明符:所需的小数位数。
例:
F('{1 :P}') 结果为 :100.00 % (默认保留百分的两位小数)
F('{-0.39678:P1}') 结果为 :-39.7% (自动四舍五入)
7、“X”或“x” ,转换为十六进制字符串。
类型支持:仅限整型类型。
精度说明符:结果字符串中的位数。
例:
F('{255:X}') 结果为 : FF
F('{-1:x}') 结果为 : ffffffffffffffff
F('{255:x4}') 结果为 :00ff
F('{-1:X4}') 结果为 :FFFFFFFFFFFFFFFF
8、零占位符和数字占位符
例:
F('{12394.039:0000.00}') 结果为:12394.04
F('{194.039:0000.00}') 结果为:0194.04(补齐不够的零)
F('{194.039:0.00000}') 结果为:194.03900(补齐不够的零)
F('{12394.039:####.##}') 结果为:12394.04(自动四舍五入)
F('{194.039:####.#}') 结果为:194(剔除未尾的零字符)
下面的这段说明比较难理解,多测试一下实际的应用就可以明白了。
- 零占位符: 如果格式化的值在格式字符串中出现“0”的位置有一个数字,则此数字被复制到结果字符串中。小数点前最左边的“0”的位置和小数点后最右边的“0”的位置确定总在结果字符串中出现的数字范围。 “00”说明符使得值被舍入到小数点前最近的数字,其中零位总被舍去。
- 数字占位符: 如果格式化的值在格式字符串中出现“#”的位置有一个数字,则此数字被复制到结果字符串中。否则,结果字符串中的此位置不存储任何值。
二、标准日期和时间格式字符串
例:
F('{now():d}') 结果为: 2020/7/20(月份位置不是07)
F('{now():D}') 结果为: 2020年7月20日
F('{now():f}') 结果为: 2020年7月20日 11:01
F('{now():F}') 结果为:2020年7月20日 11:01:10
F('{now():g}') 结果为:2020/7/20 11:01
F('{now():G}') 结果为:2020/7/20 11:02:18
F('{now():m}') 结果为:7月20日
F('{now():t}') 结果为:11:03
F('{now():T}') 结果为:11:03:39
自定义日期和时间格式字符串
"d" 一个月中的某一天(1 到 31)。
2009-06-01T13:45:30 -> 1
2009-06-15T13:45:30 -> 15
“dd” 一个月中的某一天(01 到 31)。
2009-06-01T13:45:30 -> 01
2009-06-15T13:45:30 -> 15
“ddd” 一周中某天的缩写名称。
2009-06-15T13:45:30 ->周一
“dddd” 一周中某天的完整名称。
2009-06-15T13:45:30 -> 星期一
“f” 日期和时间值的十分之几秒。
2009-06-15T13:45:30.6170000 -> 6
2009-06-15T13:45:30.05 -> 0
“ff” 日期和时间值的百分之几秒。
2009-06-15T13:45:30.6170000 -> 61
2009-06-15T13:45:30.0050000 -> 00
“fff” 日期和时间值的千分之几秒。
6/15/2009 13:45:30.617 -> 617
6/15/2009 13:45:30.0005 -> 000
“ffff” 日期和时间值的万分之几秒。
2009-06-15T13:45:30.6175000 -> 6175
2009-06-15T13:45:30.0000500 -> 0000
“fffff” 日期和时间值的十万分之几秒。
2009-06-15T13:45:30.6175400 -> 61754
6/15/2009 13:45:30.000005 -> 00000
“ffffff” 日期和时间值的百万分之几秒。
2009-06-15T13:45:30.6175420 -> 617542
2009-06-15T13:45:30.0000005 -> 000000
“fffffff” 日期和时间值的千万分之几秒。
2009-06-15T13:45:30.6175425 -> 6175425
2009-06-15T13:45:30.0001150 -> 0001150
“F” 如果非零,则为日期和时间值的十分之几秒。
2009-06-15T13:45:30.6170000 -> 6
2009-06-15T13:45:30.0500000 ->(无输出)
“FF” 如果非零,则为日期和时间值的百分之几秒。
2009-06-15T13:45:30.6170000 -> 61
2009-06-15T13:45:30.0050000 ->(无输出)
“FFF” 如果非零,则为日期和时间值的千分之几秒。
2009-06-15T13:45:30.6170000 -> 617
2009-06-15T13:45:30.0005000 ->(无输出)
“FFFF” 如果非零,则为日期和时间值的万分之几秒。
2009-06-15T13:45:30.5275000 -> 5275
2009-06-15T13:45:30.0000500 ->(无输出)
“FFFFF” 如果非零,则为日期和时间值的十万分之几秒。
2009-06-15T13:45:30.6175400 -> 61754
2009-06-15T13:45:30.0000050 ->(无输出)
“FFFFFF” 如果非零,则为日期和时间值的百万分之几秒。
2009-06-15T13:45:30.6175420 -> 617542
2009-06-15T13:45:30.0000005 ->(无输出)
“FFFFFFF” 如果非零,则为日期和时间值的千万分之几秒。
2009-06-15T13:45:30.6175425 -> 6175425
2009-06-15T13:45:30.0001150 -> 000115
“g”、“gg” 时期或纪元。
2009-06-15T13:45:30.6170000 -> A.D.
“h” 采用 12 小时制的小时(从 1 到 12)。
2009-06-15T01:45:30 -> 1
2009-06-15T13:45:30 -> 1
“hh” 采用 12 小时制的小时(从 01 到 12)。
2009-06-15T01:45:30 -> 01
2009-06-15T13:45:30 -> 01
“H” 采用 24 小时制的小时(从 0 到 23)。
2009-06-15T01:45:30 -> 1
2009-06-15T13:45:30 -> 13
“HH” 采用 24 小时制的小时(从 00 到 23)。
2009-06-15T01:45:30 -> 01
2009-06-15T13:45:30 -> 13
“m” 分钟(0 到 59)。
2009-06-15T01:09:30 -> 9
2009-06-15T13:29:30 -> 29
“mm” 分钟(00 到 59)。
2009-06-15T01:09:30 -> 09
2009-06-15T01:45:30 -> 45
“M” 月份(1 到 12)。
2009-06-15T13:45:30 -> 6
“MM” 月份(1 到 12)。
2009-06-15T13:45:30 -> 06
“MMM” 月份的缩写名称。
2009-06-15T13:45:30 -> Jun (en-US)
2009-06-15T13:45:30 -> juin (fr-FR)
2009-06-15T13:45:30 -> Jun (zu-ZA)
“MMMM” 月份的完整名称。
2009-06-15T13:45:30 -> June (en-US)
2009-06-15T13:45:30 -> juni (da-DK)
2009-06-15T13:45:30 -> uJuni (zu-ZA)
“s” 秒(0 到 59)。
2009-06-15T13:45:09 -> 9
“ss” 秒(00 到 59)。
2009-06-15T13:45:09 -> 09
“tt” AM/PM 指示符。
2009-06-15T13:45:30 -> 下午
“y” 年份(0 到 99)。
0001-01-01T00:00:00 -> 1
0900-01-01T00:00:00 -> 0
1900-01-01T00:00:00 -> 0
2009-06-15T13:45:30 -> 9
2019-06-15T13:45:30 -> 19
“yy” 年份(00 到 99)。
0001-01-01T00:00:00 -> 01
0900-01-01T00:00:00 -> 00
1900-01-01T00:00:00 -> 00
2019-06-15T13:45:30 -> 19
“yyy” 年份(最少三位数字)。
0001-01-01T00:00:00 -> 001
0900-01-01T00:00:00 -> 900
1900-01-01T00:00:00 -> 1900
2009-06-15T13:45:30 -> 2009
“yyyy” 由四位数字表示的年份。
0001-01-01T00:00:00 -> 0001
0900-01-01T00:00:00 -> 0900
1900-01-01T00:00:00 -> 1900
2009-06-15T13:45:30 -> 2009
“yyyyy” 由五位数字表示的年份。
0001-01-01T00:00:00 -> 00001
2009-06-15T13:45:30 -> 02009
“z” 相对于 UTC 的小时偏移量,无前导零。
2009-06-15T13:45:30-07:00 -> -7
“zz” 相对于 UTC 的小时偏移量,带有表示一位数值的前导零。
2009-06-15T13:45:30-07:00 -> -07
“zzz” 相对于 UTC 的小时和分钟偏移量。
2009-06-15T13:45:30-07:00 -> -07:00
例:
F('{todatetime("2009-06-15T13:45:30.6175420 "):yyyy-MM-dd HH:mm:ss}') 结果为2009-06-15 13:45:30