6.11 将分割数据转换为多值IN列表

问题

已经有了分隔数据,想要将其转换为WHERE子句IN列表中的项目。考虑下面的字符串:

7654,7698,7782,7788

要将该字符串用在WHERE子句中,但是下面的SQL语句是错误的,因为EMPNO是一个数值列:

select ename,sal,deptno

from emp

where empno in ( ‘7654,7698,7782,7788‘ )

因为EMPNO是一个数值列,而此IN列表是一个字符串值,所以此SQL语句会失败。现要将此字符串转换为用逗号分解的数值列表。

解决方案

表面上看SQL应该将分隔字符串作为一个分隔值列表对待,但是实际情况不是这样。当SQL遇到括在引号中的逗号时,并不知道此符号表示多值列表,SQL必须将括在引号中的内容作为一个整体对待,也就是一个字符串值。因此必须将字符串分解为各个单独的EMPNO。这种解决方案的关键就是需要遍历字符串,但并不是一个字符一个字符地遍历,而是要将这个字符串转换为有效的EMPNO值。

select empno, ename, sal, deptno  
   from emp
  where empno in       
        (
 select substring_index(
        substring_index(list.vals,‘,‘,iter.pos),‘,‘,-1) empno
   from (select id pos from t10) as iter,       
        (select ‘7654,7698,7782,7788‘ as vals
           from t1) list
  where iter.pos <=
        (length(list.vals)-length(replace(list.vals,‘,‘,‘‘)))+1
        ) ;

+-------+--------+------+--------+
| empno | ename  | sal  | deptno |
+-------+--------+------+--------+
|  7654 | MARTIN | 1250 |     30 |
|  7698 | BLAKE  | 2850 |     30 |
|  7782 | CLARK  | 2450 |     10 |
+-------+--------+------+--------+

时间: 2024-10-15 18:58:59

6.11 将分割数据转换为多值IN列表的相关文章

db2 将逗号分隔数据转换为多值IN列表

将逗号分隔数据转换为多值IN列表 2010-03-15 11:16:59|  分类: 数据库技术|举报|字号 订阅 下载LOFTER我的照片书  | 原文:http://book.csdn.net/bookfiles/530/10053017906.shtml 6.11       将分隔数据转换为多值IN列表 问题 已经有了分隔数据,想要将其转换为WHERE子句IN列表中的项目.考虑下面的字符串: 7654,7698,7782,7788 要将该字符串用在WHERE子句中,但是下面的SQL语句是

C++11 std::move 强制转换为右值

[1]std::move 在C++11中,标准库在<utility>中提供了一个有用的函数std::move. 这个函数的名字很具有迷惑性,因为实际上std::move并不能移动任何东西,它唯一的功能:将一个左值强制转化为右值引用,继而可以通过右值引用使用该值,以用于移动语义. 从实现上讲,std::move基本等同于一个类型转换: static_cast<T&&>(lvalue); [2]应用注意项 (1)被std::move转化的左值,其生命期并没有随着转化而改

c语言实现灰度图转换为二值图

将上篇得到的灰度图转换为二值图,读取像素数据,低于某一值置0,否则设置为255,为得到更好的效果不同图片应采用不同的值 1 /* 2 2015年6月2日11:16:22 3 灰度图转换为二值图 4 blog:http://www.cnblogs.com/wd1001/ 5 */ 6 #include<stdio.h> 7 #include<malloc.h> 8 #include<stdlib.h> 9 /* 10 位图头结构 11 */ 12 #pragma pack

从视频文件中读入数据--&gt;将数据转换为灰度图--&gt;对图像做candy边缘检测

//从视频文件中读入数据-->将数据转换为灰度图-->对图像做candy边缘检测 //作者:sandy //时间:2015-10-10 #include <cv.h> #include <highgui.h> int main(int argc, char *argv[]){ //预备工作 CvCapture* capture=cvCreateFileCapture("E:\\Videos\\xx.avi");//让capture变量指向视频文件 i

Python将JSON格式数据转换为SQL语句以便导入MySQL数据库

前文中我们把网络爬虫爬取的数据保存为JSON格式,但为了能够更方便地处理数据,我们希望把这些数据导入到MySQL数据库中.phpMyadmin可以把MySQL数据库中的数据导出为JSON格式文件,但却不能把JSON格式文件导入到MySQL数据库.为了实现这个目标,可以编写Python脚本将JSON格式数据转换为SQL语句以便导入MySQL数据库. JSON文件tencent.json部分内容: {"recruitNumber": "1", "name&qu

ORACLE 数据转换为MYSQL

ORACLE 数据转换为MYSQL ①将oracle数据转换为txt文本,且分割符为'|' ②新建表,记得修改的表结构,因为oracle和mysql 字段有些不一致的. 参照下面表格: ③执行导入操作 load data local infile '文件名.txt' into table 数据库表名  character set utf8 fields terminated by '|' ;

ArcGIS教程:将表面数据转换为矢量数据

虽然不规则三角网 (TIN) 和 terrain 数据集被视为向量表面,但它们实际上包含基于要素的其他信息,而该信息在处于像点.线或面这样的原始格式时可能更有用.在 ArcGIS 中,您可以很轻松地将表面数据转换为矢量要素.通过在选择.叠加.编辑或多图层建模的过程中应用这种转换操作,将增强您的分析能力. 您可能希望将三种表面转换为点.线和面等矢量数据.可以使用三种不同的方法将栅格.TIN 和 Terrain 数据集表面转换为矢量数据. 栅格表面转矢量要素 包含高程的栅格表面通常被提取为面要素数据

C#将RGB图像格式数据转换为BITMAP和BITSOURCE对象

1 public void RGBTOBITMAP(BYTE/*自定义的数据IntPtr*/ bits,int width/*图像的宽度*/,int height/*图像的高度*/) 2 int widthStep = width*3; //一般默认步长为宽度的3倍 3 int lenData = widthStep * height;//数据长度,24位图像数据的长度=宽度*高度*3 4 int len = 0; //代表长度 5 //bits图像帧数据 6 byte[] buffer = n

强制转换为右值

在C++11中,标准库在<utility>中提供了一个有用的函数std::move,这个函数的名字具有迷惑性,因为实际上std::move并不能移动任何东西,它唯一的功能是将一个左值强制转化为右值引用,继而我们可以通过右值引用使用该值,以用于移动语义.从实现上讲,std::move基本等同于一个类型转换: static_cast<T&&>(lvalue); 值得一提的是,被转化的左值,其生命期并没有随着左右值的转化而改变. #include <iostream