‘壹’ sql 语句 修改
用update 触发器
思路:
1、小位置号改成大位置号,则两个位置号之间的值-1(不包括更新的位置号)
如:
21 1
22 2
23 3
24 4
将22的位置号改为4,则2和4之间的位置号(不包括编号22的位置号)都减一变成:
21 1
22 4
23 2
24 3
2、大位置号改成小位置号,则两个位置号之间的值+1(不包括更新的位置号)
如:
21 1
22 2
23 3
24 4
将24的位置号改为1,则1和4之间的位置号(不包括编号24的位置号)都加一变成:
21 2
22 3
23 4
24 1
更新出发器如下:
create TRIGGER udt_tableu
ON table
FOR update AS
declare @palceNo_i int
declare @palceNo_d int
declare @no_i varchar(10)
select @palceNo_i= 位置 from inserted
select @no_i = 编号 from inserted
select @palceNo_d= 位置 from deleted
if update(位置)
begin
if @palceNo_i> @palceNo_d
begin
update 表 set 位置=位置-1
where 位置 between @palceNo_d and @palceNo_i and 编号<>@no_i
end
else if @palceNo_i< @palceNo_d
begin
update 表 set 位置=位置+1
where 位置 between @palceNo_i and @palceNo_d and 编号<>@no_i
end
end
GO
‘贰’ SQL值互换位置
update table set A=2,B=1 where A=1 and B=2;
‘叁’ 用sql表值函数实现字符串的位置调换
创建
createfunction[dbo].wei
(@scodevarchar(10))
Returnsvarchar(10)
As
Begin
Declare@lenint
Declare@tvarchar(10)
select@len=len(@scode)
set@t=''
if@len%2=1
begin
set@t=SUBSTRING(@scode,@len/2+2,@len/2)+SUBSTRING(@scode,@len/2+1,1)+SUBSTRING(@scode,1,@len/2)
end
elseif@len%2=0
begin
set@t=SUBSTRING(@scode,@len/2+1,@len/2)+SUBSTRING(@scode,1,@len/2)
end
return@t
end
执行测试
selectdbo.wei('1230456')
selectdbo.wei('123456')
‘肆’ sql 如何将两行换位
数据在表中是没有实际位置的概念的,所以排序只可以在select的时候设置,update是不能更改循序的,如果要实现你的效果,首先你要找一个主键或一个保存数据顺序的字段,这样才好设置调转两条记录的顺序 ,当你找好了主键或创建了保存数据顺序的字段,如果是主键,只能每次select的时候为这情况特别处理,如果是记录顺序的字段,就好办了,update更改一下该字段的值,然后order by 该字段即可,所以如果数据的顺序比较重要,推荐建立一个保存顺序的字段
‘伍’ sql 替换某一位置字符
sql server 2005及以上版本可使用STUFF函数。
语法:
STUFF(character_expression,start,length,character_expression)
参数说明:
character_expression:一个字符数据表达式。character_expression可以是常量、变量,也可以是字符列或二进制数据列。
start:一个整数值,指定删除和插入的开始位置。如果start或length为负,则返回空字符串。如果start比第一个character_expression长,则返回空字符串。start可以是bigint类型。
length:一个整数,指定要删除的字符数。如果length比第一个character_expression长,则最多删除到最后一个character_expression中的最后一个字符。length可以是bigint类型。
返回类型
如果character_expression是受支持的字符数据类型,则返回字符数据。如果character_expression是一个受支持的 binary 数据类型,则返回二进制数据。
注释
如果开始位置或长度值是负数,或者如果开始位置大于第一个字符串的长度,将返回空字符串。如果要删除的长度大于第一个字符串的长度,将删除到第一个字符串中的第一个字符。
如果结果值大于返回类型支持的最大值,则产生错误。
示例
以下示例在第一个字符串abcdef中删除从第2个位置(字符b)开始的三个字符,然后在删除的起始位置插入第二个字符串,从而创建并返回一个字符串。
SELECTSTUFF('abcdef',2,3,'ijklmn');
GO
下面是结果集:
---------
aijklmnef
(1 row(s) affected)
以上摘自:https://msdn.microsoft.com/zh-cn/library/ms188043(v=sql.105).aspx
‘陆’ sql数据库中select和from语句可以调换位置吗。
不可以,固定格式。select语句格式:
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
以上语句的先后顺序不得改变。
‘柒’ Microsoft SQL Server 2008 我设计好表,然后写入数据,执行后,有些行会换位置这是怎么回事
读取表时并不一定会按你输入的数据顺序来排列的,你可以在查询语句中使用order by 来指定排序顺序
如; select * from table1 order by newdata;
‘捌’ sql 如何更换列的位置
select name , num from tablename
‘玖’ C/S的影院座位表情况怎样存进SQL server 2005里
应该不同的影厅座位情况不一样吧?如果是有不同影厅的情况,那么最起码应该有如下表和字段:
1. 影厅座位信息表:
ID(主键) 影厅ID(外键) 排号 座位号(或者使用排号+座号的方式如6.1就代表6排1号,两字段合并)
这个表应该基本上是静态的,因为影厅的座位信息基本不会动。
2. 电影场次表:
ID(主键) 电影ID 时间 影厅ID ……
3. 电影票售出情况表:
ID(主键,电影票号) 场次号(2表的主键) 座位号(1表的主键) ……
应该是点击某一场次的电影,才会出现你说的这个界面,根据数据库中2表和1表,可以先取出该影厅的所有座位情况并显示;其次根据2表和3表取出所有已售电影票,遍历刚才的座位,将已售出的座位换颜色即可。
当然这里只是给一个思路,具体实现可能还是比较复杂,要考虑的很多,权当一个参考吧。
‘拾’ SQLServer2008中,在已经建好的表,如何修改列的前后位置
理论上是删表重建,但是可以通过表设计器调换,让设计器帮你删表重建
右键表点设计,然后调换位置,最后保存即可