常用SQL

查询XML字段的某节点 和 以XML字段中某节点为条件执行查询
SELECT   [ ID ]
      ,
[ ReportID ]
      ,
[ ReportSort ]
      ,
[ ReportCondition ]
      ,
[ InsertTime ]
      ,ReportCondition.query(
' /root/UserName ' ).value( ' UserName[1] ' , ' varchar(50) ' )
  
FROM   [ PSYDB_TestReport ] . [ dbo ] . [ PSYT_TS_ReportSort ]
  
WHERE  ReportCondition.query( ' /root/UserName ' )
        .value(
' UserName[1] ' , ' varchar(50) ' )
        
=   ' mengwei1 '

SELECT   [ ID ]
      ,
[ ReportID ]
      ,
[ ReportSort ]
      ,
[ ReportCondition ]
      ,
[ ReportXml ]
      ,
[ InsertTime ]
FROM   [ PSYDB_TestReport ] . [ dbo ] . [ PSYT_TS_ReportSort ]
WHERE   Convert ( varchar ( 50 ), [ ReportCondition ] .query( ' /root/SystemID/text() ' )) = ' SEMS '
AND   Convert ( varchar ( 50 ), [ ReportCondition ] .query( ' /root/ScaleNum/text() ' ))  LIKE   ' SEMSZz% '
象的属性
select  xcol.value ( '' ( / book / @genre ) [ 1 ]'' '' varchar ( 50 ) '' ),
       xcol.value (
'' ( / book / title) [ 1 ]'' '' varchar ( 50 ) '' ),
       xcol.value (
'' ( / book / @isbn ) [ 1 ]'' '' varchar ( 50 ) '' )
from  t
修改Xml字段中的节点
Select   [ ReportCondition ]   From   [ PSYDB_TestReport ] . [ dbo ] . [ PSYT_TS_ReportSort ]   Where   [ ReportID ]   =   3554
UPDATE   [ PSYDB_TestReport ] . [ dbo ] . [ PSYT_TS_ReportSort ]
SET   [ ReportCondition ] .modify( ' replace value of (/root/Duration/text())[1] with "15" ' )
Where   [ ReportID ]   =   3554
Select   [ ReportCondition ]   From   [ PSYDB_TestReport ] . [ dbo ] . [ PSYT_TS_ReportSort ]   Where   [ ReportID ]   =   3554
SQL 获取年月日方法
SELECT   DATEPART ( year GETDATE ()), DATEPART ( month GETDATE ()), DATEPART ( day GETDATE ())

SELECT   year ( GETDATE ()),  month ( GETDATE ()),  day ( GETDATE ())


求时间差的函数:
DATEDIFF ( datepart , startdate , enddate )
enddate 减去 startdate。如果 startdate 晚于 enddate,则返回负值。
datepart  指定应在日期的哪一部分计算差额的参数。下表列出了 Microsoft SQL Server 2005 可识别的日期部分及其缩写。

日期部分 缩写

year

yy, yyyy

quarter

qq, q

month

mm, m

dayofyear

dy, y

day

dd, d

week

wk, ww

Hour

hh

minute

mi, n

second

ss, s

millisecond

ms

示例 删除添加时间为空或添加时间超过5小时的记录

Delete   From  DoExamTable  Where  InsertTime  IS   NULL   OR   DATEDIFF (hh,InsertTime, GETDATE ())  >   5




-- --分割字符串
--
创建函数
create   function  split
(
  
@SourceSql   varchar ( 8000 ),
  
@StrSeprate   varchar ( 10 )
)
returns   @temp   table (F1  varchar ( 100 ))
as
begin
  
declare   @i   int
   
set   @SourceSql = rtrim ( ltrim ( @SourceSql ))
   
set   @i = charindex ( @StrSeprate , @SourceSql )
   
while   @i >= 1
   
begin
     
insert   @temp   values ( left ( @SourceSql , @i - 1 ))
     
set   @SourceSql = substring ( @SourceSql , @i + 1 , len ( @SourceSql ) - @i )
     
set   @i = charindex ( @StrSeprate , @SourceSql )
   
end
   
if   @SourceSql <> ''
     
insert   @temp   values ( @SourceSql )
   
return
end
-- 执行
select   *   from  split( ' 01_02_03 ' , ' _ '


几个sql语句的使用
where 与 having 的区别
SQLServer2005的XML最佳实施策略
SQL Server 2005的XML数据修改语言(XML DML)
一步一步优化SQL语句(一):逻辑查询的各个阶段
一步一步优化SQL语句(二):物理查询处理
一道 SQL 面试题
关于 T-SQL 的几点小九九 (1)
SQL SERVER2005 分区表几何倍数提高网站性能
SQL函数大全 
Inside T-SQL XML (一)XML数据类型

转载于:https://www.cnblogs.com/gleamy_ming/archive/2009/04/10/1432973.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值