SQL Server的STR是一个字符串函数,用于返回数字表达式的字符串表示形式。STR函数的语法如下所示。
SELECT STR(Float_Expression, Length, Decimal) FROM [Source]
此SQL字符串STR函数将返回VARCHAR。STR可用的参数列表为:
- Float_Expression:请指定要转换为字符数据的有效表达式。请指定任何带有小数点的浮点数据类型的表达式。
- length:这是一个可选参数,表示字符串的总长度。分配给length参数的值包括小数点、符号、空格和数字。如果省略此参数,则默认长度为10。
- decimal:这是一个可选参数,表示字符串结果要显示的位数。分配给decimal参数的值必须小于或等于16,如果您分配的值大于16,则结果将被截断为16。
SQL Server STR 函数示例
STR函数返回浮点值的字符串表示。以下查询将向您展示使用此函数的多种方法。
DECLARE @Num FLOAT SET @Num = 786.387 -- No Length, Decimal arguments. @Num value will be rounded SELECT STR(@Num) AS Result1 -- Length = 7, No Decimal argument. -- Although length is 7, @Num value will be rounded because decimal places defaults value is 0 SELECT STR(@Num, 7) AS Result2 SELECT STR(@Num, 7, 0) AS Result3 -- Length = 7, Decimals = 1, 2 Resulting string will return 1 and 2 decimal values SELECT STR(@Num, 7, 1) AS Result4 SELECT STR(@Num, 7, 2) AS Result5 SELECT STR(@Num, 6, 1) AS Result6 -- Length = 5, Decimals = 3. SELECT STR(@Num, 5, 3) AS Result7

在此STR函数示例查询中,对于两个语句,Length = 7,第一个语句没有Decimal参数,第二个语句Decimal = 0。尽管长度值为7,但@Num值被四舍五入,因为Decimal位数的默认值为0。
SELECT STR(@Num, 7) AS Result2 SELECT STR(@Num, 7, 0) AS Result3
这里,Length = 5,Decimals = 3。尽管小数位值为3,但@Num值四舍五入为1,因为长度值为5(786.4的长度为5,包括小数点)。
SELECT STR(@Num, 5, 3) AS Result7
SQL Server STR 函数示例 2
在此示例中,我们将使用具有不均匀长度和十进制值的STR函数。
SELECT STR(786.387) AS Result1 SELECT STR(786.387, 3) AS Result2 SELECT STR(786.387, 2) AS Result3 SELECT STR(786.387, 2, 2) AS Result4 SELECT STR(786.387, 9, 5) AS Result5 SELECT STR(FLOOR(786.387), 9, 4) AS Result6 SELECT STR(CEILING(786.387), 9, 4) AS Result7

在此,我们为小数点左侧分配了小于其值长度的值。SQL Server将返回以下格式的输出:**
SELECT STR(786.387, 2) AS Result3 SELECT STR(786.387, 2, 2) AS Result4
接下来,我们将STR函数应用于floor和ceiling值。尽管这些值被四舍五入到最接近的值,但此字符串函数返回小数点后4个零,因为我们将Decimal参数设置为4,Length = 9(787.0000的长度为9,包括小数点)。
SELECT STR(FLOOR(786.387), 9, 4) AS Result6 SELECT STR(CEILING(786.387), 9, 4) AS Result7
STR 函数示例 3
在此示例中,我们将SQL STR函数应用于数字列。为了演示,我们将使用下面显示的数据。

以下STR字符串函数语句将返回[Yearly Income]和[Sales]列的字符串表示。
SELECT [FirstName]
,[LastName]
,[Education]
,[Occupation]
,[YearlyIncome]
,STR([YearlyIncome], 4, 2) AS [Str Income]
,[Sales]
,STR([Sales], 7, 3) AS [Str Sales]
FROM [Employee]
从下面的屏幕截图中,您可以看到str Income返回****,因为我们分配的长度值小于年收入值。
