在本文中,您将会了解到关于将varchar值转换为数据类型int时转换失败的新资讯,同时我们还将为您解释varchar转换成int的相关在本文中,我们将带你探索将varchar值转换为数据类型int时
在本文中,您将会了解到关于将varchar值转换为数据类型int时转换失败的新资讯,同时我们还将为您解释varchar转换成int的相关在本文中,我们将带你探索将varchar值转换为数据类型int时转换失败的奥秘,分析varchar转换成int的特点,并给出一些关于LONG 数据类型转换为 VARCHAR2 并相互转换、mysql怎么将varchar转换为int类型、SQL Server 2005:将varchar值'1.23E-4'转换为十进制失败、sql – 将nvarchar值转换为数据类型int时,转换失败的实用技巧。
本文目录一览:- 将varchar值转换为数据类型int时转换失败(varchar转换成int)
- LONG 数据类型转换为 VARCHAR2 并相互转换
- mysql怎么将varchar转换为int类型
- SQL Server 2005:将varchar值'1.23E-4'转换为十进制失败
- sql – 将nvarchar值转换为数据类型int时,转换失败
将varchar值转换为数据类型int时转换失败(varchar转换成int)
我有一个varchar(1000)列声明为包含所有数字的字段,如下所示。我想执行以下脚本。我需要这个工作
Declare @PostalCode varchar(1000)=0 set @PostalCode =''7005036,7004168,7002314,7001188,6998955''Select hl.* From CountryLocation clINNER JOIN refPostalCodes pc ON pc.PostalCode = hl.PostalCodewhere pc.Postalcode in (@PostalCode) and pc.notDeleted = 1
答案1
小编典典看来您想使用sp_executesql:
Declare @PostalCode varchar(1000)=0 set @PostalCode =''7005036,7004168,7002314,7001188,6998955''declare @sql nvarchar(4000) //didn''t count the chars...select @sql = N''Select hl.* From CountryLocation clINNER JOIN refPostalCodes pc ON pc.PostalCode = hl.PostalCodewhere pc.Postalcode in ('' + @PostalCode + '') and pc.notDeleted = 1''exec sp_executesql @sql
以这种方式编码时,您需要 非常注意 SQL注入。
LONG 数据类型转换为 VARCHAR2 并相互转换
-- 方法 1,支持表
--plsql 中将 long 类型隐式转换为 varchar2,但是 sql 不能
CREATE OR REPLACE FUNCTION LONG_TO_CHAR(
in_rowid rowid,
in_owner varchar,
in_table_name varchar,
in_column varchar2)
RETURN varchar AS
text_c1 varchar2(32767);
sql_cur varchar2(2000);
--set serveroutput on size 10000000000;
begin
DBMS_OUTPUT.ENABLE (buffer_size=>null);
sql_cur := ''select ''||in_column||'' from ''||in_owner||''.''||in_table_name||'' where rowid = ''||chr(39)||in_rowid||chr(39);
dbms_output.put_line (sql_cur);
execute immediate sql_cur into text_c1;
text_c1 := substr(text_c1, 1, 4000);
RETURN TEXT_C1;
END;
/
--------------------------------------
--test
-- 参数分别为 rowid,用户,表名,字段名
DROP TABLE VI.TEST1;
CREATE TABLE VI.TEST1(ID NUMBER,V_CLOB CLOB,V_LONG LONG DEFAULT ''create or replace view v_t'',V_SYSDATE DATE DEFAULT SYSDATE);
INSERT INTO VI.TEST1(ID) SELECT 1 FROM DUAL;
COMMIT;
select LONG_TO_CHAR(ROWID, ''VI'', ''TEST1'', ''V_LONG'') FROM TEST1;
-------------------------------------------------------------------------------------------------------------------------------------------------
-- 方法 2,支持表和视图
--long 查询结果转换为 varchar2 类型
/* 来自 Thomas Kyte 《Oracle9i/10g/11g 编程艺术》 12 章节中。由于 long 的操作限制,那么在操作 long 之前可以将该类型的结果转换为 varchar2,
然后再使用 long_help.substr_of,基本意思是将 long 结果的的前 4000 字节转换为 varchar2 类型。如果 long 的数据超过了 4000 字节,那么可以将循环调用此函数
*/
create or replace package long_help
authid current_user
as
function substr_of(
p_query in varchar2,
p_from in number,
p_for in number,
p_name1 in varchar2 default NULL,
p_bind1 in varchar2 default NULL,
p_name2 in varchar2 default NULL,
p_bind2 in varchar2 default NULL,
p_name3 in varchar2 default NULL,
p_bind3 in varchar2 default NULL,
p_name4 in varchar2 default NULL,
p_bind4 in varchar2 default NULL
)
return varchar2;
end;
/
create or replace package body long_help
as
g_cursor number := dbms_sql.open_cursor;
g_query varchar2(32765);
procedure bind_variable(
p_name in varchar2,
p_value in varchar2
)
is
begin
if ( p_name is not null) then
dbms_sql.bind_variable( g_cursor, p_name, p_value );
end if;
end;
function substr_of(
p_query in varchar2,
p_from in number,
p_for in number,
p_name1 in varchar2 default NULL,
p_bind1 in varchar2 default NULL,
p_name2 in varchar2 default NULL,
p_bind2 in varchar2 default NULL,
p_name3 in varchar2 default NULL,
p_bind3 in varchar2 default NULL,
p_name4 in varchar2 default NULL,
p_bind4 in varchar2 default NULL)
return varchar2 as
l_buffer varchar2(4000);
l_buffer_len number;
begin
if ( nvl(p_from,0) <= 0 ) then
raise_application_error(-20002, ''From must be >= 1 (positive numbers)'');
end if;
if ( nvl(p_for,0) not between 1 and 4000 ) then
raise_application_error (-20003, ''For must be between 1 and 4000'' );
end if;
if ( p_query <> g_query or g_query is NULL ) then
if ( upper(trim(nvl(p_query,''x''))) not like ''SELECT%'') then
raise_application_error(-20001, ''This must be a select only'' );
end if;
dbms_sql.parse( g_cursor, p_query, dbms_sql.native );
g_query := p_query;
end if;
bind_variable( p_name1, p_bind1 );
bind_variable( p_name2, p_bind2 );
bind_variable( p_name3, p_bind3 );
bind_variable( p_name4, p_bind4 );
dbms_sql.define_column_long(g_cursor, 1);
if (dbms_sql.execute_and_fetch(g_cursor)>0) then
dbms_sql.column_value_long(g_cursor, 1, p_for, p_from-1,l_buffer, l_buffer_len );
end if;
return l_buffer;
end substr_of;
end;
/
-- 使用方法:
-- 查询 DBA_TAB_PARTITIONS 中的 LONG 类型:HIGH_VALUE
SELECT * FROM(
SELECT TABLE_OWNER,TABLE_NAME,PARTITION_NAME,
LONG_HELP.SUBSTR_OF(''SELECT HIGH_VALUE FROM DBA_TAB_PARTITIONS WHERE TABLE_OWNER=:TABLE_OWNER AND TABLE_NAME=:TABLE_NAME AND PARTITION_NAME=:PARTITION_NAME'',
1,
4000,
''TABLE_OWNER'',
TABLE_OWNER,
''TABLE_NAME'',
TABLE_NAME,
''PARTITION_NAME'',
PARTITION_NAME) HIGH_VALUE
FROM DBA_TAB_PARTITIONS
);
-- 查询 long 类型数据
SELECT LONG_HELP.SUBSTR_OF(''SELECT V_LONG FROM TEST1'',1,4000) FROM TEST1;
-- 查询 DBA_VIEWS 视图的 TEXT 时报错:ORA-01006:绑定变量不存在 (原因可能是不支持视图,应该在外层写筛选条件)
-------------------------------------------------------------------------------------------------------------------------------------------------
-- 方法三,支持表
select sys.dbms_metadata_util.long2varchar(100,''scott.t1'',''name'',rowid) from scott.t1;
-------------------------------------------------------------------------------------------------------------------------------------------------
--varchar2 转化为 long,撰写的 procedure 案例如下
create table erpmainbom(
location varchar2(4000),
locationplus long,
parentpn varchar2(4000),
pn varchar2(4000),
plant varchar2(4000)
);
--location 字段空格之前的字符重新复制给 location,从空格开始的之后的字符拼接 locationplus(long 类型)字段并复制给 locationplus
Create or replace PROCEDURE P_UPDATELOCALPLUS(
strMitm in varchar2,
strSubITEM in varchar2,
strPlant in varchar2)
as
lLocationPlus long;
strLocation varchar2(4000);
strSubLoc varchar2(50);
lTempLoct long;
i number;
Begin
Select location,locationplus into strLocation,lLocationPlus from erpmainbom Where parentpn=strMitm and pn=strSubITEM and plant= strPlant;
If length(strLocation)=4000 then
i:=1;
strSubLoc:=substr(strLocation,4000,i);
While InStr(strSubLoc, '' '') = 0 Loop
i := i + 1;
strSubLoc := substr(strLocation,4000-i,i);
End Loop;
--i:=i+1;
strSubLoc := substr(strLocation,4000-i,i+1);
strLocation := substr(strLocation,1, 4000 - Length(strSubLoc));
lTempLoct:=strSubLoc;
End if;
lLocationPlus:=lTempLoct||lLocationPlus;
update erpmainbom set location=strLocation,locationplus=lLocationPlus where parentpn=strMitm and pn=strSubITEM and plant= strPlant;
commit;
EXCEPTION When others then
Rollback;
end;
/
mysql怎么将varchar转换为int类型
转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as signed)”;2、利用“select * from 表名 order by convert(字段名,signed)”语句。
本教程操作环境:windows10系统、
mysql怎么将varchar转换为int类型
mysql中有两个函数可以进行类型转换:
1.CAST()
MySQL CAST()函数的语法如下:
CAST(expression AS TYPE);
CAST()函数将任何类型的值转换为具有指定类型的值。目标类型可以是以下类型之一:BINARY,CHAR,DATE,DATETIME,TIME,DECIMAL,SIGNED,UNSIGNED。
2.CONVERT()
MySQL CONVERT()提供一个在不同字符集之间转换数据的方法。
语法是:
CONVERT(expr USING transcoding_name)
在 MySQL中,转换代码名与相应的字符集名相同。
示例如下:
1.手动转化类型(直接+0)
select server_id from cardserver where game_id = 1 order by server_id+0 desclimit 10
2.使用MySQL函数CAST
select server_id from cardserver where game_id = 1 order by CAST(server_id as SIGNED) desc limit 10;
3.使用MySQL函数CONVERT
select server_id from cardserver where game_id = 1 order by CONVERT(server_id,SIGNED)desc limit 10;
推荐学习:mysql视频教程
以上就是
SQL Server 2005:将varchar值'1.23E-4'转换为十进制失败
如何解决SQL Server 2005:将varchar值''1.23E-4''转换为十进制失败?
SELECT @b = CONVERT(REAL, @a, 2)
科学记数法仅适用于FLOAT
和REAL
。
解决方法
declare @a varchar(40)
set @a=''1.23e-4''
declare @b decimal(27,12)
if isnumeric(@a) =1
begin
select @b=cast(@a as decimal(27,12))
end
else
begin
select @b=-1
end
select @b
在SQL 2005环境下执行以上sql代码时,出现以下错误。
将数据类型varchar转换为数值时出错
有人知道为什么吗?
谢谢。
sql – 将nvarchar值转换为数据类型int时,转换失败
CREATE procedure getdata ( @ID int,@frm varchar(250),@to varchar(250) ) AS BEGIN DECLARE @sql nvarchar(500) set @sql = 'select' set @sql = @sql + ' EmpName,Address,Salary from Emp_Tb where 1=1 ' IF (@ID <> '' and @ID is not null) Begin SET @sql=@sql+' AND Emp_Id_Pk=' +@ID End END print @sql --execute (@sql)
我尝试执行它:
**execute getdata 3,'','';**
但是我收到以下错误:
Conversion Failed when converting the nvarchar value ‘select EmpName,
Address,Salary from Emp_Tb where 1=1 AND Emp_Id_Pk=’ to data type int
请帮忙.
解决方法
您需要将 cast @ID作为字符串.
尝试:
SET @sql=@sql+' AND Emp_Id_Pk=' + CAST(@ID AS NVARCHAR(10))
我们今天的关于将varchar值转换为数据类型int时转换失败和varchar转换成int的分享已经告一段落,感谢您的关注,如果您想了解更多关于LONG 数据类型转换为 VARCHAR2 并相互转换、mysql怎么将varchar转换为int类型、SQL Server 2005:将varchar值'1.23E-4'转换为十进制失败、sql – 将nvarchar值转换为数据类型int时,转换失败的相关信息,请在本站查询。
本文标签: