1. 第133章 sql函数 STRING
将表达式转换并连接成字符串的函数。
STRING 将一个或多个字符串转换为 STRING 格式,然后将这些字符串连接成一个字符串。不执行大小写转换。
STRING 在字符串转换之前将数字转换为其规范形式。因此,它执行算术运算,从数字中删除前导和尾随零以及前导加号。
如果字符串参数之一为 NULL ,则 STRING 返回 NULL 。如果字符串参数之一是空字符串 ( '' ),则 STRING 将连接其他参数。 STRING 保留空格。
可以使用 %SQLSTRING 函数转换数据值以进行区分大小写的字符串比较,或使用 %SQLUPPER 函数转换数据值以进行不区分大小写的字符串比较。
在以下嵌入式 SQL 示例中, STRING 将三个子字符串连接成一个字符串。该示例显示了空格、空字符串和 NULL 的处理:
在以下嵌入式 SQL 示例中, STRING 将数字转换为字符串。所有这些 STRING 函数都返回字符串 “123” :
在以下嵌入式 SQL 示例中, STRING 从字段中检索示例数据并将其连接成一个字符串:
2. SQL 中怎么把字符串转换为数字
可以使用函数:ISNUMERIC
当输入表达式得数为一个有效的整数、浮点数、money 或 decimal 类型,那么 ISNUMERIC 返回 1;否则返回 0。返回值为 1 确保可以将 expression 转换为上述数字类型中的一种。
将字符的数字转成数字,比如'0'转成0可以直接用加法来实现;
若绝对比较可以这样:
select binary 11 =binary "11ddddd";
字符集转换:CONVERT(xxx USING gb2312);
类型转换和SQL Server一样,就是类型参数有点点不同 : CAST(xxx AS 类型),CONVERT(xxx,类型);
类型必须用下列的类型:BINARY、CHAR()、DATE、TIME、DATETIME、DECIMAL、SIGNED、UNSIGNED。
数据类型:
字符串数据类型是建模在形式字符串的想法上的数据类型。字符串是几乎在所有编程语言中可以实现的非常重要和有用的数据类型。在某些语言中它们可作为基本类型获得,在另一些语言中做为复合类型获得。多数高级语言的语法允许通常用某种方式引用起来的字符串来表示字符串数据类型的实例;这种元字符串叫做“文本”或“字符串文本”。
以上内容参考:网络-字符串
3. SQL中的CONVERT函数的用法是什么
CONVERT( 要转换到的类型, 合法的表达式, 格式化类型 )。
4. sql语句会自动转换类型吗
会。在处理不同数轿帆据类型的值时,SQLServer会自动进行前举隐士类型转换。对于数据类型相近的值是有效的,比如int和float,但是对于其它数据类型,例如整型和字符类型,隐士转换就无法实现了,此时必须使用显示转换。为了实现这种显示转换,T-SQL提供了两个显示转换慧帆碧函数,分别是CAST和CONVERT函数。
5. SQL CONVERT()函数的问题
第三十一章 SQL函数 CONVERT
将给定表达式转换为指定数据类型的函数。
CONVERT(datatype,expression[,format-code])
{fn CONVERT(expression,datatype)}
参数
expression - 要转换的表达式。
datatype - 要将表达式转换为的数据类型。
format - 可选-指定日期和时间格式的整数代码,用于在日期/时间/时间戳数据类型和字符数据类型之间进行转换。 此参数仅用于通用标量语法形式。
描述
这里描述了CONVERT函数的两种不同实现。 两者都将一种数据类型中的表达式转换为另一种数据类型中的相应值。 两者都执行日期和时间转换。
注意:这两个CONVERT实现中的参数以不同的顺序表示。 第一个是与MS SQL Server兼容的通用 IRIS标量函数,它接受三个参数。 第二个是带有两个参数的 ODBC标量函数。 下面的文本将分别处理这两种形式的CONVERT。
CONVERT(datatype,expression)支持流数据的转换。 例如,可以将字符流字段的内容转换为数据类型为VARCHAR的字符串。
{fn CONVERT(expression,datatype)}不支持流数据的转换; 指定要表达的流字段将导致SQLCODE -37错误。
为两个版本的CONVERT指定一个无效值将导致SQLCODE -141。
如果表达式没有定义的数据类型(例如ObjectScript提供的主机变量),则其数据类型默认为字符串数据类型。
CONVERT(datatype,expression,format-code)
可以通过执行VARCHAR-to-VARCHAR转换来截断字符串,指定输出字符串长度小于表达式字符串长度。
在使用CONVERT(或CAST)时,如果字符数据类型(如CHAR或VARCHAR)没有指定长度,则默认的最大长度为30个字符。 如果二进制数据类型(如binary或VARBINARY)没有指定长度,则默认的最大长度为30个字符。 否则,这些没有指定长度的数据类型将被映射到一个1个字符的MAXLEN,如data types表所示。
可以执行BIT数据类型转换。 允许的值为1、0或NULL。 如果指定任何其他值,IRIS将发出SQLCODE -141错误。 在下面的嵌入式SQL示例中,两者都是一个NULL的BIT转换:
ClassMethod Convert()
{
s a=""
&sql(
SELECT CONVERT(BIT,:a),
CONVERT(BIT,NULL)
INTO :x,:y)
w !,"SQLCODE=",SQLCODE
w !,"the host variable is:",x
w !,"the NULL keyword is:",y
}
可选的format-code参数指定日期、datetime或时间格式。 该格式既可用于定义从日期/时间/时间戳数据类型转换为字符串时的输出,也可用于定义从字符串转换为日期/时间/时间戳数据类型时的输入。 支持以下格式代码; 输出两位数年份的格式代码列在第一列; 输出四位数年或不输出年的格式列在第二列:
Two-digit year codes Four-digit year codes Format
以下是日期和时间转换的特性:
取值范围:允许的日期范围为0001-01-01 ~ 9999-12-31。
默认值:
将时间值转换为TIMESTAMP、POSIXTIME、DATETIME或SMALLDATETIME时,日期默认为1900-01-01。 注意,对于{fn CONVERT()},日期默认为1841-01-01。
将日期值转换为TIMESTAMP、POSIXTIME、DATETIME或SMALLDATETIME时,时间默认为00:00:00。
Default Format:如果没有指定Format -code, CONVERT将尝试从指定的值确定格式。 如果不能,则默认为格式代码100。
两位数年份:从00到49的两位数年份转换为21世纪的日期(2000到2049); 从50到99的两位数年份转换为20世纪的日期(1950到1999)。
分数秒:分数秒前可以加句号(.)或冒号(:)。 这些符号有不同的含义:
句点是默认值,可用于所有格式代码。 句号表示标准分数; 因此,12:00:00.4表示十分之四秒,而12:00:00.004表示千分之四秒。 分数精度的位数没有限制。
冒号只能用于以下格式代码值:9/109、13/113、14/114、130和131。 冒号表示后面的数字是千分之一秒; 因此12:00:00:4表示四万分之一秒(12:00:00.004)。 冒号后面的数字限制为3位。
当指定表达式的格式无效或格式与格式代码不匹配时,将产生SQLCODE -141错误。 指定一个不存在的格式代码将返回1900-01-01 00:00:00。
{fn CONVERT(expression,datatype)}
这是ODBC标量函数。 它支持以下ODBC显式数据类型转换。 必须使用“SQL_”关键字指定这种形式的CONVERT的数据类型转换。 在下表中,有两组转换数据类型,第一组转换数据值和数据类型,第二组转换数据类型,但不转换数据值:
Source Conversion
SQL_VARCHAR是标准的ODBC表示。 在转换为SQL_VARCHAR时,日期和时间被转换为相应的ODBC表示; 数字数据类型值转换为字符串表示。 从SQL_VARCHAR转换时,该值必须是有效的ODBC Time、Timestamp或Date表示。
当将时间值转换为SQL_TIMESTAMP或SQL_POSIXTIME时,未指定的日期默认为1841-01-01。 注意,对于CONVERT(),日期默认为1900-01-01。
将date值转换为SQL_TIMESTAMP或SQL_POSIXTIME时,时间默认为00:00:00。
在这种语法形式中,小数秒前面可以加句号(.)或冒号(:)。 这些符号有不同的含义。 句号表示标准分数; 因此,12:00:00.4表示十分之四秒,而12:00:00.004表示千分之四秒。 冒号表示接下来的是千分之一秒; 因此12:00:00:4表示千分之四秒。 冒号后面的数字限制为3位。
在转换为整数数据类型或SQL_DOUBLE数据类型时,数据值(包括日期和时间)将转换为数字表示。 对于SQL_DATE,这是自1841年1月1日以来的天数。 对于SQL_TIME,这是自午夜以来的秒数。 当遇到非数字字符时,输入字符串将被截断。 整数数据类型还截断十进制数字,返回数字的整数部分。
{fn CONVERT(expression,datatype)}不支持流数据的转换; 指定要表达的流字段将导致SQLCODE -37错误。
转换成任何数据类型的NULL仍然是NULL。
空字符串("),或任何非数字字符串值转换如下:
SQL_VARCHAR和SQL_TIMESTAMP返回提供的值。
数字数据类型转换为0(零)。
SQL_DATE和SQL_TIME转换为NULL。
CONVERT 类方法
还可以使用CONVERT()方法调用执行数据类型转换,使用" SQL_"关键字指定数据类型:
$SYSTEM.SQL.Functions.CONVERT(expression,convert-to-type,convert-from-type)
如下示例所示:
WRITE $SYSTEM.SQL.CONVERT(60945,"SQL_VARCHAR","SQL_DATE")
2007-11-11
示例
CONVERT() 示例
下面的示例使用标量语法形式的CONVERT。
下面的示例比较了使用DECIMAL和DOUBLE数据类型对小数的转换:
SELECT CONVERT(DECIMAL,-123456789.0000123456789) AS DecimalVal,
CONVERT(DOUBLE,-123456789.0000123456789) AS DoubleVal
下面的示例将字符流字段转换为VARCHAR文本字符串。 它还使用CHAR_LENGTH显示字符流字段的长度:
SELECT Notes,CONVERT(VARCHAR(80),Notes) AS NoteText,CHAR_LENGTH(Notes) AS TextLen
FROM Sample.Employee WHERE Notes IS NOT NULL
下面的例子展示了几种将出生日期字段(DOB)转换为格式化字符串的方法:
SELECT DOB,
CONVERT(VARCHAR(20),DOB) AS DOBDefault,
CONVERT(VARCHAR(20),DOB,100) AS DOB100,
CONVERT(VARCHAR(20),DOB,107) AS DOB107,
CONVERT(VARCHAR(20),DOB,114) AS DOB114,
CONVERT(VARCHAR(20),DOB,126) AS DOB126
FROM Sample.Person
默认格式和代码100格式是相同的。 因为DOB字段不包含时间值,所以显示时间的格式(这里包括默认值100、114和126)提供一个零值,它表示12:00AM(午夜)。 代码126格式提供了一个不包含空格的日期和时间字符串。
{fn CONVERT()} 示例
下面的示例使用了ODBC语法形式的CONVERT。
下面的嵌入式SQL示例将混合字符串转换为整数。 IRIS在第一个非数字字符处截断字符串,然后将结果数字转换为规范形式:
ClassMethod Convert1()
{
s a="007 James Bond"
&sql(SELECT {fn CONVERT(:a, SQL_INTEGER)} INTO :x)
w !,"SQLCODE=",SQLCODE
w !,"the host variable is:",x
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).Convert1()
SQLCODE=0
the host variable is:7
下面的示例将“DOB”(出生日期)列中的日期转换为SQL_TIMESTAMP数据类型。
SELECT DOB,{fn CONVERT(DOB,SQL_TIMESTAMP)} AS DOBtoTstamp
FROM Sample.Person
生成的时间戳格式为“yyyy-mm-dd hh:mm:ss”。
下面的示例将“DOB”(出生日期)列中的日期转换为SQL_INTEGER数据类型。
SELECT DOB,{fn CONVERT(DOB,SQL_INTEGER)} AS DOBtoInt
FROM Sample.Person
下面的示例将“DOB”(出生日期)列中的日期转换为SQL_VARCHAR数据类型。
SELECT DOB,{fn CONVERT(DOB,SQL_VARCHAR)} AS DOBtoVChar
FROM Sample.Person
生成的字符串格式为:yyyy-mm-dd。
6. SQL怎么样把numeric类型的数据转换为varchar类型的数据
可以用cast来转换。
如:列名叫grade,表名为A select cast(grade as numeric(y,x)) from A 其中y代表数据长度,x代表小数位长度。
注意:grade中必须全为数字或小数点,如果存在中文或英文,则运行时会报错。
使用CAST函数进行数据类型转换时,在下列情况下能够被接受:
(1)两个表达式的数据类型完全相同。
(2)两个表达式可隐性转换。
(3)必须显式转换数据类型。
(6)sql数据转换函数扩展阅读
SQL中类型转换函数:
1、cast
cast(表达式 as 数据类型)
select 100.0 +cast('1000' as int) -- 1100.0 默认把字符串转换成浮整形。
2、convert
convert(数据类型,表达式)
select 100.0 + convert(int,'1000')-- 1100.0 默认把字符串转换成整形。
3、select * from student order by convert (int,bid) desc --bid列按照降序来排列,bid是varchar类型。
4、print convert(varchar(10),getdate(),120) --日期转换varchar(10)表示显示的字符长度,120表示style,可以在SSMS 帮助中查看详情。
5、cast不可以转换日期类型,convert可以通用。
7. 求SQL常用数据类型转换函数
sql中用convert这个函数进行数据类型转换
1.CONVERT()
函数可以用不同的格式显示日期/时间数据。
CONVERT(data_type(length),data_to_be_converted,style)
style:
100
或者
0
mon
dd
yyyy
hh:miAM
(或者
PM)
101
mm/dd/yy
102
yy.mm.dd
103
dd/mm/yy
104
dd.mm.yy
105
dd-mm-yy
106
dd
mon
yy
107
Mon
dd,
yy
108
hh:mm:ss
109
或者
9
mon
dd
yyyy
hh:mi:ss:mmmAM(或者
PM)
110
mm-dd-yy
111
yy/mm/dd
112
yymmdd
113
或者
13
dd
mon
yyyy
hh:mm:ss:mmm(24h)
114
hh:mi:ss:mmm(24h)
120
或者
20
yyyy-mm-dd
hh:mi:ss(24h)
121
或者
21
yyyy-mm-dd
hh:mi:ss.mmm(24h)
126
yyyy-mm-ddThh:mm:ss.mmm(没有空格)
130
dd
mon
yyyy
hh:mi:ss:mmmAM
131
dd/mm/yy
hh:mi:ss:mmmAM
例子:CONVERT(VARCHAR(10),GETDATE(),110)
2.CONVERT()
函数是把数据类型间的转换
例子:select
CONVERT(int,'10')