转载链接:http://www.cnblogs.com/pacer/archive/2010/12/21/1912488.html
今天遇到一个SQL语句的问题,原语句是这样的:
SELECT ID,BRANDID FROM dbo.TYPE WHERE 1=1 AND EXISTS(SELECT * FROM dbo.BRAND WHERE ISRECOMMEND=1 AND BID IN (BRANDID)) ;
这里面的逻辑就暂且不说了,关键问题是在末尾的'BIDIN (BRANDID)'这里,在SQL中直接查询是会报错的,例如'转换成数据类型 int 时失败'
这个问题当然可以通过拼接SQL语句去查询,例如:
DECLARE @BARANDID VARCHAR(100) SET @BARANDID= (SELECT BRANDID FROM dbo.TYPE) EXEC('SELECT * FROM dbo.BRAND WHERE ISRECOMMEND=1 AND BID IN ('+BRANDID+')')
这里必须得EXEC,但现在这不是我们要的结果
另外的可以通过这种方式去实现一条SQL语句直接的查询:
SELECT ID,BRANDID FROM dbo.TYPE WHERE 1=1 AND EXISTS(SELECT * FROM dbo.BRAND WHERE ISRECOMMEND=1 AND CHARINDEX(','+LTRIM(BID)+',',','+BRANDID+',')>0)
这里的关键是CHARINDEX 函数。
附这个函数的说明:
CHARINDEX ( expression1 , expression2 [ , start_location ] )
Expression1是要到expression2中寻找的字符中,start_location是CHARINDEX函数开始在expression2中找expression1的位置。
CHARINDEX函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置。假如CHARINDEX没有找到要找的字符串,那么函数整数“0”。让我们看看下面的函数命令执行的结果:
CHARINDEX('SQL', 'Microsoft SQL Server')
这个函数命令将返回在“Microsoft SQL Server”中“SQL”的起始位置,在这个例子中,CHARINDEX函数将返回“S”在“Microsoft SQL Server”中的位置11。
接下来,我们看这个CHARINDEX命令:
CHARINDEX('7.0', 'Microsoft SQL Server 2000')
在这个例子中,CHARINDEX返回零,因为字符串“7.0” 不能在“Microsoft SQL Server”中被找到。接下来通过两个例子来看看如何使用CHARINDEX函数来解决实际的T-SQL问题。
好啦,像这样的问题,终于解决啦.若有更好的解决办法希望大家讨论
相关推荐
sql中把varchar类型转换为int型然后进行排序,如果我们数据库的ID设置为varchar型的 在查询的时候order by id的话
Oracle SQL 函数进行BLOB转换Varchar2
uniqueidentifier转换成varchar数据类型的sql语句,需要的朋友可以参考下。
把num类型转成nvarchar类型 cast(@num as nvarchar(10)) @str=’123′; 把str转换成int 类型 cast(@str as int) 您可能感兴趣的文章:详解SQL Server中的数据类型详解MySQL数据类型int(M)中M的含义mysql存储...
* @description 当数据表无连接时创建新的表 */ @Override public void onCreate(SQLiteDatabase db) { String sql = " create table if not exists " + Table_Name + "(id INTEGER PRIMARY KEY ...
各种string类型转换
sql语句将行转换成列 declare @sql varchar(8000) set @sql = 'select 物料代码' select @sql = @sql + ',sum(case 地区 when '''+地区+''' then 数量 end) ['+地区+']' + ',sum(case 地区 when '''+地区+'''...
将SQL表转换为GraphQL模式 将生成的代码复制到剪贴板 暗模式 :spiral_notepad: 文件 粘贴SQL查询示例。 CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(225) NOT NULL, `...
可将sql server 数据表生成sql语句 语句中包括建表部分和数据部分 常用作sql server 数据导入 例如:--表 buyi_product_comment 的结构 CREATE TABLE buyi_product_comment(proId varchar(50) not null,companyid ...
---数字转换汉字----RR--------------------- ALTER FUNCTION numToChinese(@str varchar(20)) RETURNS VARCHAR(20) AS BEGIN declare @i int, @n_str varchar(1),@data varchar(20)
前言 前面几篇文章我们讲解了索引有关知识,这一节我们再继续我们下面内容讲解,...两种字符数据类型的文本表示方式也不相同,在表示常规字符文本时,只需要使用单引号,比如’Hello,my name is JeffckyWang,I’m fro
oracle中varchar与date的转换,number与varchar的转换.pdf
sql server中使用convert来取得datetime数据类型样式(全) 日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-02-01 08:02/*时间一般为getdate()函数或数据表里的字段*/ CONVERT...
declare @i int set @i=’a’ set @i=cast(‘a’ as int) set @i=convert(int, ‘a’) print @i –输出结果为:将 varchar 值 ‘a’ 转换为数据类型为 int 的列时发生语法错误。这一点与java不一样 declare @...
SQLServer2000数据类型 varchar number
在Java下连接SQLite数据库 一、下载SQLite数据库的JDBC:http://www.zentus.com/sqlitejdbc/ 二、将下载到的包解压后得到jar包放到%JAVA_HOME%\lib下,并且将其添加到ClassPath系统环境变量中。一定要保证在类路径...
sql-varbinary转换成字符串,主要是将SQL中的二进制转换成字符串显示。
oracle+proc中文.pdf 1 前言 ...................................................................................................................4.1.6 Oracle数据类型............................................