sql中的CHARINDEX和暂时表

update #temp

set #temp.Recycle=case when UnionA.num>0 then 1 else 0 end

from (select GradeID,sum(num)as num from AreaAllot

where CHARINDEX(@Area,AreaAllot.Area)=1 and LEN(@Area)=LEN(Area)-2

group by GradeID)UnionA inner join #temp

on UnionA.GradeID=#temp.GradeID

1、对于这个CHARINDEX今天纠结了非常久才算弄明确是怎么个意思。为了以后忘记,所以大概的做一下笔记。

CHARINDEX(@Area,AreaAllot.Area)=1还有就是@Area在AreaAllot.Area里面的起始位置,等于1表示起始位置为第一位,假设等于2表示起始位置为第二位,依此类推,可是假设等于0表示@Area不被包括在AreaAllot.Area中。

列子:

select CHARINDEX(‘43‘,‘414305‘)

select CHARINDEX(‘43‘,‘4305‘)

2、曾经我一直以为group by 和order by是一个意思,就是排序。今天才知道原来group by是用来分类的。

时间: 2024-10-17 21:25:49

sql中的CHARINDEX和暂时表的相关文章

sql中的CHARINDEX和临时表

update #temp set #temp.Recycle=case when UnionA.num>0 then 1 else 0 end from (select GradeID,sum(num)as num from AreaAllot where CHARINDEX(@Area,AreaAllot.Area)=1 and LEN(@Area)=LEN(Area)-2 group by GradeID)UnionA inner join #temp on UnionA.GradeID=#

SQL中的charindex函数与reverse函数用法

----------------------首先介绍charindex函数----------------------------- CHARINDEX函数返回字符或者字符串在另一个字符串中的起始位置. CHARINDEX函数调用方法如下: CHARINDEX ( expression1 , expression2 [ , start_location ] ) Expression1是要到expression2中寻找的字符中,start_location是CHARINDEX函数开始在expres

sql中如何 将一张表的数据 更新到另外一张表的字段中

今天操作数据库       有个需求需要从一张流水表中有用户付款金额    还有一张  是用户的结算金额    每个用户的付款和结算费率和手续费等都不一样   需要将剩余可以结算的金额查询出来  进行更新到各自对应的用户后面  花了几分钟写出来去测试了一下  没问题 万变不离其中   依然还是  在 update  +表(及其关联表) +set  +更改字段 +where 条件 update merchant m join ( select pc.cp_channel channelId,0.0

SQL中的每一张表都必须设有主键吗

主键的作用: 1)保证实体的完整性; 2)加快数据库的操作速度 3)在表中添加新记录时,数据库会自动检查新记录的主键值,不允许该值与其他记录的主键值重复. 4) 数据库自动按主键值的顺序显示表中的记录.如果没有定义主键,则按输入记录的顺序显示表中的记录. 主键不是非要不可,可以从: 1.是否满足业务要求 2.数据查询效率(主键可以提高查询效率,当然合理的索引替代也可以) 这两个角度权衡是否需要主键. 这要看表的功能. 利用来存储大量数据,并需要经常查询的,建立主键可以加快查询效率从而降低服务器的

SQL中自定义拆分为新表的函数

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 /*按照符号分割字符串*/ create function [dbo].[m_split](@c varchar(2000),@split varchar(2))     returns @t table(col varchar(200))     as     begin       while(charindex(@split,@c)<>0)           begin           inse

在oracle存储过程中创建暂时表

在oracle的存储过程中,不能直接使用DDL语句,比方create.alter.drop.truncate等. 那假设我们想在存储过程中建立一张暂时表就仅仅能使用动态sql语句了: create or replace procedure pro as str_sql varchar2(100); begin -- 创建暂时表 str_sql := 'create global temporary table temp_table ( col1 varchar2(10), col2 number

数据库中暂时表,表变量和CTE使用优势极其差别

1 在写SQL时常常会用到暂时表,表变量和CTE,这三者在使用时各有优势: 1. 暂时表:分为局部暂时表和全局暂时表. 1.1局部暂时表,创建时以#开头,在系统数据库tempdb中存储. 在当前的链接可见,链接断开则暂时表就自己主动被释放,也能够手动drop table #tmptable 在使用不同的链接同一时候创建同样的暂时表时,互不影响,系统在tempdb中会自己主动附加以特定的session为标识的名字来区分. 经常在SP中使用,把须要操作的数据或者共同的数据取出放在暂时表中,兴许能够进

(转)SQL中的ISNULL函数介绍

SQL中有多种多样的函数,下面将为您介绍SQL中的ISNULL函数,包括其语法.注释.返回类型等,供您参考,希望对您学习SQL能够有所帮助. ISNULL 使用指定的替换值替换 NULL. 语法ISNULL ( check_expression , replacement_value ) 参数check_expression 将被检查是否为 NULL的表达式.check_expression 可以是任何类型的. replacement_value 在 check_expression 为 NUL

SQL中的Truncate Table

SQL中的Delete语句从表中删除一条或多条记录,同时可以给Delete语句提供Where子句,SQL中的 Select语句中可以使用的任何条件都可以在DELECT的WHERE子句中使用.Delete语句的语法格式是: DELETE [FROM] {table_name|view_name}  [WHERE condition]. 如果不给Delete语句指定Where子句,表中的所有记录都将被删除.一般在执行Delete语句时,一定要仔细斟酌Where子句.如果确实需要删除表中的所有记录,应