sql数据转换

2023-04-07 17:49:01 浏览数 (1)

常用语句 --查询是否有空值 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

0 人点赞