`

转:Sql 在将varchar值 '21,123,.. ' 转换成数据类型 int 时失败 的问题

阅读更多

转载链接: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函数返回字符或者字符串在另一个字符串中的起始位置。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问题。

 

 好啦,像这样的问题,终于解决啦.若有更好的解决办法希望大家讨论

 

分享到:
评论

相关推荐

    mysql数据类型转换

    它可以帮助我们灵活地处理不同类型的数据,尤其是在进行数据检索或处理时,经常需要将一种数据类型转换为另一种数据类型。本文将详细介绍MySQL中的数据类型转换方法及其应用场景。 #### 二、MySQL数据类型转换概述 ...

    金蝶K3进度15-数据类型转换操作流程.docx

    CAST和CONVERT是SQL中两种常用的数据类型转换函数,它们都可以将一种数据类型的表达式转换为另一种数据类型的表达式。 CAST和CONVERT的主要区别在于语法不同,CAST函数不提供style参数,而CONVERT函数提供style参数...

    sql使用cast进行数据类型转换示例

    在SQL中,数据类型转换是将一个数据值从一种数据类型转换为另一种数据类型的过程,这对于处理各种数据库操作和查询时的数据一致性至关重要。`CAST`函数是SQL中用于执行这种转换的标准方法,它允许我们将一个表达式从...

    SQL中convert和cast的区别

    它可以将数据类型转换为其他类型,例如将 numeric 类型转换为 int 类型。Cast 函数的语法格式为:`CAST (expression AS datatype)` 其中,`expression` 是要转换的源数据表达式,`datatype` 是要转换的目标数据类型...

    sql中常用函数[定义].pdf

    - INT函数:将值转换为整数,例如`INT('123.45')`将返回123。 - DECIMAL函数:用于将值转换为十进制数,如`DECIMAL(123.45)`。 - FLOAT函数:转换为浮点数,如`FLOAT('123.45')`。 - TEXT函数:将数值转换为文本...

    Sql Server解析Json

    1. **`OPENJSON` 函数**:用于将 JSON 数据转换为表格形式。 2. **`FOR JSON` 子句**:用于将查询结果格式化为 JSON 输出。 3. **`JSON_VALUE` 和 `JSON_QUERY` 函数**:用于从 JSON 数据中提取特定值或子文档。 ...

    SQL 2005 函数大全及示例

    例如,`CONVERT` 和 `CAST` 函数可以用来转换数据类型。在进行数据类型转换时,需要遵循数据类型优先级规则,从用户定义的数据类型到二进制类型,每种数据类型都有其特定的优先级。如果转换不符合规则,系统将返回...

    sql warning报错出错信息说明

    这表示在使用 money 数据类型时输入了无效的值。 - **错误 153**:%3!%1! 使用无效的方式。这表示使用某个功能的方式不正确。 - **错误 154**:%2! 不能使用 %1!。这表示在某些情况下不能使用特定的功能。 - **错误 ...

    PL/SQL 基础.doc

    TYPE tabletype IS TABLE OF type(类型名,要保存成的数据类型) INDEX BY BINARY_INTEGER; 例:DECLARE TYPE t_emp IS TABLE OF s_emp%ROWTYPE INDEX BY BINARY_INTERGER; v_emp t_emp; BEGIN SELECT * ...

    DB2 SQL 精萃.pdf

    当需要将一种数据类型转换为另一种数据类型时,可以使用 DB2 的转换函数。例如: ```sql SELECT CAST('123' AS INT), TO_CHAR(123.45, 'FM999990.00') FROM DUAL; ``` 这里,`CAST` 用于将字符串转换为整型,而 `TO_...

    sql一些基本常用的语句

    更新`tbczy`表中`cgh`为`0100`的行,将`cmm`字段值设置为`123`(转换为`varbinary`类型)。 14. **删除表**: ```sql DROP TABLE tblr; ``` 删除名为`tblr`的表。 15. **清空表**: ```sql DELETE FROM tblr;...

    Mysql 数字类型转换函数

    在MySQL数据库中,数据类型转换是常见的操作,特别是在处理不同类型的数据时。这涉及到将一个数据类型转换成另一个数据类型,以便进行正确的计算、比较或存储。以下是一些关于MySQL数字类型转换函数的关键知识点: ...

    SQL OPENQUERY 传参数

    在SQL Server中,`OPENQUERY` 是一个非常实用的Transact-SQL语句,它允许我们从外部数据源,如ODBC数据源,执行动态SQL查询。`OPENQUERY` 的优势在于可以方便地处理分布式查询,尤其是在需要跨数据库系统进行数据...

    SQL SERVER中强制类型转换cast和convert的区别详解

    在SQL SERVER中,数据类型转换是数据库操作中的常见任务,以确保数据的正确解析和处理。强制类型转换有两个主要函数:CAST和CONVERT,它们在功能上相似,但有一些细微的差异。 首先,CAST函数是一种标准的SQL语法,...

    Oracle迁移到DB2 SQL语句差异

    **DB2**: 提供了不同的数据类型转换函数,如`CHAR`、`VARCHAR`、`INT`、`DATE`、`TIME`等。 - `DATE`: 获取当前日期。 ```sql SELECT DATE(CURRENT_TIMESTAMP) FROM SYSIBM.SYSDUMMY1; ``` - `TIME`: 获取当前...

    Oracle和DB2的转换[参照].pdf

    在进行Oracle到DB2的转换时,理解这些语法差异是至关重要的,以确保查询和数据操作的正确性。同时,还需要注意两者的性能特性、事务处理、安全性以及存储过程等方面的差异,以便进行更高效、可靠的数据库迁移和管理...

    ORACLE与DB2的区别和转换

    DB2则通过`cast`函数实现相同功能,可以将一种数据类型转换为另一种数据类型。 ##### 8. 创建类似表 **Oracle**: `create table a as select * from b;` **DB2**: `create table a like b;` - **解析**: 在...

    Sql Server 2012 转换函数的比较(Cast、Convert和Parse)

    这些函数的目的是将一种数据类型转换成另一种数据类型,以满足不同的处理需求。 1. Cast 函数: Cast函数遵循ANSI SQL标准,提供了一种在不同数据库系统间通用的转换方式。它的语法结构为`CAST ( expression AS ...

Global site tag (gtag.js) - Google Analytics