文章目录

sql数据转换

由 从日、安声 发布

常用语句
--查询是否有空值
select * from iteminfo where 主供应商 = '' or 主供应商 is null
--查询字段是否超出长度
select * from iteminfo where len(单位)>20

--截取字段长度
update iteminfo set 名称=substring(ltrim(rtrim(名称)),1,20)
--查询重复项
select 条码 from iteminfo group by 条码 having count(*)>1
--删除重复项
delete iteminfo where 条码 in(select 条码 from iteminfo group by 条码 having count(*)>1)
--插入正式表数据
insert into t_bd_item_info(item_no,item_subno,item_name,item_subname,item_clsno,unit_no,item_size,product_area,price,base_price,sale_price,main_supcust)
select 条码,店内码,名称,简称,类别,单位,规格,产地,进价,批发价,建议零售价,主供应商 from iteminfo

在操作sqlserver时候用到了substring函数
SUBSTRING ( expression, start, length )
参数
expression
字符串、二进制字符串、文本、图像、列或包含列的表达式。请勿使用包含聚合函数的表达式。
start
整数或可以隐式转换为 int 的表达式,指定子字符串的开始位置。
length
整数或可以隐式转换为 int 的表达式,指定子字符串的长度(但是结果并补一个返回length字符长度,要看expression的长度和start的设置!!!!!!!!!!!)。
返回值
如果 expression 是一种支持的字符数据类型,则返回字符数据。如果 expression 是一种支持的二进制数据类型,则返回二进制数据。如果 start = 1,则子字符串从表达式的第一个字符开始
需要补充一句的是,开始start位置的设置,确实如果设置为1,会从第一个字符开始计数,2,3,4....以此类推、
select substring(ziduan,1,6)
将会选择字段的前6个字符,比如说是200908
如果设置为0,
同样的执行select substring(ziduan,0,6)
结果会是20090,如果换成-1
同样执行select substring(ziduan,-1,6)
结果会是2009
同样-2,-3,.................依次类推
下面是网络上的其它一些文章。
substring('98765',-1,3) 结果:9
substring('98765',0,3) 结果:98
substring('98765',1,3) 结果:987
关于函数的这种情况,找了点资料,但是仍不是很明白
SubString($sourceString ,$startingLoc,$length)
$sourceString
资源字符串。
$startingLoc
子字符串在资源字符串中的起点。如果此值为负数或 0,则只返回那些所在位置大于零的字符。如果此值大于 $sourceString 的长度,则返回长度为零的字符串。
$length
[可选] 要检索的字符数。如果没有指定此值,它将返回从 $startingLoc 中指定的位置开始直到字符串末尾的所有字符。
如果此值为负数或 0,则只返回那些所在位置大于零的字符。
入门学习SQL
select substring(convert(varchar,birthdate),5,1) as mon ,* from employees
where substring(convert(varchar,birthdate),5,1)='8'
详细出处参考:http://www.jb51.net/article/21380.htm

LTRIM删除起始空格后返回字符表达式。
语法
LTRIM ( character_expression )
RTRIM截断所有尾随空格后返回一个字符串。
语法
RTRIM ( character_expression )
参数
character_expression
由字符数据组成的表达式。character_expression 可以是常量、变量,也可以是字符或二进制数据的列。
返回类型
varchar

GROUP BY 语句
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
SQL GROUP BY 语法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
SQL GROUP BY 实例
我们拥有下面这个 "Orders" 表:
O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
现在,我们希望查找每个客户的总金额(总订单)。
我们想要使用 GROUP BY 语句对客户进行组合。
我们使用下列 SQL 语句:
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
结果集类似这样:
Customer SUM(OrderPrice)
Bush 2000
Carter 1700
Adams 2000
很棒吧,对不对?
让我们看一下如果省略 GROUP BY 会出现什么情况:
SELECT Customer,SUM(OrderPrice) FROM Orders结果集类似这样:
Customer SUM(OrderPrice)
Bush 5700
Carter 5700
Bush 5700
Bush 5700
Adams 5700
Carter 5700
上面的结果集不是我们需要的。
那么为什么不能使用上面这条 SELECT 语句呢?解释如下:上面的 SELECT 语句指定了两列(Customer 和 SUM(OrderPrice))。"SUM(OrderPrice)" 返回一个单独的值("OrderPrice" 列的总计),而 "Customer" 返回 6 个值(每个值对应 "Orders" 表中的每一行)。因此,我们得不到正确的结果。不过,您已经看到了,GROUP BY 语句解决了这个问题。
GROUP BY 一个以上的列
我们也可以对一个以上的列应用 GROUP BY 语句,就像这样:
SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders
GROUP BY Customer,OrderDate

HAVING 子句
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
SQL HAVING 语法
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
SQL HAVING 实例
我们拥有下面这个 "Orders" 表:
O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter
现在,我们希望查找订单总金额少于 2000 的客户。
我们使用如下 SQL 语句:
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000
结果集类似:
Customer SUM(OrderPrice)
Carter 1700
现在我们希望查找客户 "Bush" 或 "Adams" 拥有超过 1500 的订单总金额。
我们在 SQL 语句中增加了一个普通的 WHERE 子句:
SELECT Customer,SUM(OrderPrice) FROM Orders
WHERE Customer='Bush' OR Customer='Adams'
GROUP BY Customer
HAVING SUM(OrderPrice)>1500
结果集:
Customer SUM(OrderPrice)
Bush 2000
Adams 2000

IN 操作符
IN 操作符允许我们在 WHERE 子句中规定多个值。
SQL IN 语法
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...)原始的表 (在实例中使用:)
Persons 表:
Id LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing
IN 操作符实例
现在,我们希望从上表中选取姓氏为 Adams 和 Carter 的人:
我们可以使用下面的 SELECT 语句:
SELECT * FROM Persons
WHERE LastName IN ('Adams','Carter')结果集:
Id LastName FirstName Address City
1 Adams John Oxford Street London
3 Carter Thomas Changan Street Beijing
SQL 通配符 SQL Between

DELETE 语句
DELETE 语句用于删除表中的行。
语法
DELETE FROM 表名称 WHERE 列名称 = 值Person:
LastName FirstName Address City
Gates Bill Xuanwumen 10 Beijing
Wilson Fred Zhongshan 23 Nanjing
删除某行
"Fred Wilson" 会被删除:
DELETE FROM Person WHERE LastName = 'Wilson' 结果:
LastName FirstName Address City
Gates Bill Xuanwumen 10 Beijing
删除所有行
可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
DELETE FROM table_name或者:
DELETE * FROM table_name

INSERT INTO 语句
INSERT INTO 语句用于向表格中插入新的行。
语法
INSERT INTO 表名称 VALUES (值1, 值2,....)我们也可以指定所要插入数据的列:
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)插入新的行
"Persons" 表:
LastName FirstName Address City
Carter Thomas Changan Street Beijing
SQL 语句:
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')结果:
LastName FirstName Address City
Carter Thomas Changan Street Beijing
Gates Bill Xuanwumen 10 Beijing
在指定的列中插入数据
"Persons" 表:
LastName FirstName Address City
Carter Thomas Changan Street Beijing
Gates Bill Xuanwumen 10 Beijing
SQL 语句:
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')结果:
LastName FirstName Address City
Carter Thomas Changan Street Beijing
Gates Bill Xuanwumen 10 Beijing
Wilson Champs-Elysees


暂无评论

发表评论