标签:sqlserver
--新建 CREATE TABLE [dbo].[BI_Dim_Date]( --YYMMDD [DateF] [nvarchar](20) NULL, --法国日期格式 [DateKey] [nvarchar](10) NULL, [Dim_Year] [int] NULL, [Dim_Month] [int] NULL, [Dim_Day] [int] NULL, --季度 [Qu] [int] NULL, [QuCN] [varchar](20) NULL, [QuEN] [varchar](20) NULL, --月份 [MonthCN] [varchar](20) NULL, [MonthEN] [varchar](20) NULL, --旬 1 上旬 2 中旬 3 下旬 [Ten] [int] NULL, [TenCN] [varchar](20) NULL, --周 [Dim_Week] [int] NULL, --星期几 [WeekDayCN] [varchar](20) NULL, [WeekDayEN] [varchar](20) NULL, --yy-mm-dd [Dim_Date1] [date] NULL, --DD/MM/YY [Dim_Date2] [nvarchar](10) NULL, ---是否节假日 1放假 0正常 [IsDayOff] [int] NULL, --假日说明 [Event_Name] [varchar](20) NULL ) ---插入顺序很建表顺序要对应 DECLARE @BeginDate DATE; SELECT @BeginDate = '20131230'; WHILE @BeginDate<='20171231' BEGIN INSERT INTO BI_Dim_Date SELECT dbo.ChangeIt(@BeginDate) as DateF, --CONVERT(varchar(10),@BeginDate,120) AS DateKey --查出格式2013-12-30 CONVERT(varchar(10),@BeginDate,112) AS DateKey,-- YEAR(@BeginDate) AS Dim_Year, MONTH(@BeginDate) as Dim_Month, Day(@BeginDate) AS Dim_Day, Datepart(QUARTER,@BeginDate) AS Qu, CASE WHEN Datepart(QUARTER,@BeginDate)=1 then '第一季度' WHEN Datepart(QUARTER,@BeginDate)=2 then '第二季度' WHEN Datepart(QUARTER,@BeginDate)=3 then '第三季度' ELSE '第四季度' END AS QuCN, CASE WHEN Datepart(QUARTER,@BeginDate)=1 then 'Q1' WHEN Datepart(QUARTER,@BeginDate)=2 then 'Q2' WHEN Datepart(QUARTER,@BeginDate)=3 then 'Q3' ELSE 'Q4' END AS QuEN, case when MONTH(@BeginDate)= 1 then '一月' when MONTH(@BeginDate)= 2 then '二月' when MONTH(@BeginDate)= 3 then '三月' when MONTH(@BeginDate)= 4 then '四月' when MONTH(@BeginDate)= 5 then '五月' when MONTH(@BeginDate)= 6 then '六月' when MONTH(@BeginDate)= 7 then '七月' when MONTH(@BeginDate)= 8 then '八月' when MONTH(@BeginDate)= 9 then '九月' when MONTH(@BeginDate)= 10 then '十月' when MONTH(@BeginDate)= 11 then '十一月' else '十二月' end as MonthCN, case when MONTH(@BeginDate)= 1 then 'Jan' when MONTH(@BeginDate)= 2 then 'Feb' when MONTH(@BeginDate)= 3 then 'Mar' when MONTH(@BeginDate)= 4 then 'Apr' when MONTH(@BeginDate)= 5 then 'May' when MONTH(@BeginDate)= 6 then 'Jun' when MONTH(@BeginDate)= 7 then 'Jul' when MONTH(@BeginDate)= 8 then 'Aug' when MONTH(@BeginDate)= 9 then 'Sept' when MONTH(@BeginDate)= 10 then 'Oct' when MONTH(@BeginDate)= 11 then 'Nov' else 'Dec' end as MonthEN, CASE when DATEPART(DAY,@BeginDate)<=10 THEN 1 WHEN DATEPART(DAY,@BeginDate)>20 THEN 3 ELSE 2 END as Ten, CASE when DATEPART(DAY,@BeginDate)<=10 THEN '上旬' WHEN DATEPART(DAY,@BeginDate)>20 THEN '下旬' ELSE '中旬' END as TenCN, DATEPART(WEEK,@BeginDate)-1 AS Dim_Week, DATENAME(WEEKDAY,@BeginDate) as WeekDayCN, case when DATENAME(WEEKDAY,@BeginDate)= '星期一' then 'Mon' when DATENAME(WEEKDAY,@BeginDate)= '星期二' then 'Tue' when DATENAME(WEEKDAY,@BeginDate)= '星期三' then 'Wed' when DATENAME(WEEKDAY,@BeginDate)= '星期四' then 'Thu' when DATENAME(WEEKDAY,@BeginDate)= '星期五' then 'Fri' when DATENAME(WEEKDAY,@BeginDate)= '星期六' then 'Sat' else 'Sun' end as WeekDayEN, CONVERT (varchar,@BeginDate,112) as Dim_Date1, CONVERT(varchar(100), cast(@BeginDate as datetime), 101) as Dim_Date2, 0 as IsDayOff, '' as Event_Name SET @BeginDate=DATEADD(DAY,1,@BeginDate); end; select * from BI_Dim_Date --TRUNCATE TABLE BI_Dim_Date --drop table BI_Dim_Date --select GETDATE()--2014-11-24 12:48:47 --Select CONVERT(varchar(100), '20140101', 101) --20140101 --select convert(varchar(10),convert(varchar(10),'20140101',120),112)--20140101 --select convert(varchar(10),'20140101',120) --20140101 -- Select CONVERT(varchar(100), GETDATE(), 101) 11/24/2014 --select DATENAME(WEEKDAY,'20131230') as WeekDay --set language N'English' --英文格式的星期几 --select DATENAME(WEEKDAY,'20131230') as WeekDay --set language N'简体中文' --select DATENAME(WEEKDAY,'20131230') as WeekDay --Select CONVERT(varchar(100), '20140101', 101) --20140101 --Select CONVERT(varchar(100), GETDATE(), 101) --11/24/2014 -- Select CONVERT(varchar(100), cast('20140101' as datetime), 101) --01/01/2014 --sp_rename 'Dim_Date.Month','Dim_Month','column' --sp_rename 'Dim_Date.Day','Dim_Day','column' select * from BI_Dim_Date where DateKey>='20161229' update BI_Dim_Date set Dim_Week=52 where DateKey between '20131230' and '20140105' update BI_Dim_Date set Dim_Week=52 where DateKey between '20141229' and '20150104' update BI_Dim_Date set Dim_Week=52 where DateKey between '20151228' and '20160103' update BI_Dim_Date set Dim_Week=52 where DateKey='20170101' update BI_Dim_Date set Dim_Week=Dim_Week-1 where WeekDayEN='Sun' update BI_Dim_Date set Dim_Week=Dim_Week+1 where DateKey>='20170101' --select SUBSTRING('20131230',3,2) --select SUBSTRING('20131230',7,2) --select --case -- when SUBSTRING('20131230',5,2)= 01 then 'Jan' --when SUBSTRING('20131230',5,2)= 02 then 'Feb' ---when SUBSTRING('20131230',5,2)= 03 then 'Mar' --when SUBSTRING('20131230',5,2)= 04 then 'Apr' --when SUBSTRING('20131230',5,2)= 05 then 'May' -- when SUBSTRING('20131230',5,2)= 06 then 'Jun' -- when SUBSTRING('20131230',5,2)= 07 then 'Jul' -- when SUBSTRING('20131230',5,2)= 08 then 'Aug' --when SUBSTRING('20131230',5,2)= 09 then 'Sept' -- when SUBSTRING('20131230',5,2)= 10 then 'Oct' --when SUBSTRING('20131230',5,2)= 11 then 'Nov' -- else 'Dec' --end as MonthEN, -----转化日期的存储过程 30-Dec-13 --create proc ChangeDate --@d1 nvarchar(10) --as --select a.d+'-'+b.MonthEN+'-'+c.y --from (select SUBSTRING(@d1,7,2) as d)a, --( select --case --when SUBSTRING(@d1,5,2)= 01 then 'Jan' -- when SUBSTRING(@d1,5,2)= 02 then 'Feb' --when SUBSTRING(@d1,5,2)= 03 then 'Mar' -- when SUBSTRING(@d1,5,2)= 04 then 'Apr' --when SUBSTRING(@d1,5,2)= 05 then 'May' --when SUBSTRING(@d1,5,2)= 06 then 'Jun' - --when SUBSTRING(@d1,5,2)= 07 then 'Jul' -- when SUBSTRING(@d1,5,2)= 08 then 'Aug' --when SUBSTRING(@d1,5,2)= 09 then 'Sept' --when SUBSTRING(@d1,5,2)= 10 then 'Oct' --when SUBSTRING(@d1,5,2)= 11 then 'Nov' --else 'Dec' --end as MonthEN)b, --(select SUBSTRING(@d1,3,2) as y) c --exec ChangeDate @d1='20130220' ---自定义函数 CREATE FUNCTION ChangeIt(@dd nvarchar(10)) returns nvarchar(20) AS begin declare @result nvarchar(20) SET @result=( select (a.d+'-'+b.MonthEN+'-'+c.y) from (select SUBSTRING(@dd,9,2) AS d)a, ( select case when SUBSTRING(@dd,6,2)= 01 then 'Jan' when SUBSTRING(@dd,6,2)= 02 then 'Feb' when SUBSTRING(@dd,6,2)= 03 then 'Mar' when SUBSTRING(@dd,6,2)= 04 then 'Apr' when SUBSTRING(@dd,6,2)= 05 then 'May' when SUBSTRING(@dd,6,2)= 06 then 'Jun' when SUBSTRING(@dd,6,2)= 07 then 'Jul' when SUBSTRING(@dd,6,2)= 08 then 'Aug' when SUBSTRING(@dd,6,2)= 09 then 'Sept' when SUBSTRING(@dd,6,2)= 10 then 'Oct' when SUBSTRING(@dd,6,2)= 11 then 'Nov' else 'Dec' end AS MonthEN)b, (select SUBSTRING(@dd,3,2) as y) c ) RETURN (@result) END --drop function ChangeIt SELECT [dbo].ChangeIt('20131201') SELECT dbo.ChangeIt('20131201') -- SET LANGUAGE us_english --SELECT DATENAME(dd, '2010-5-31')+'-'+DATENAME(m, '2010-5-31')+'-'+DATENAME(yy, '2010-5-31') DECLARE @BeginDate DATE; SELECT @BeginDate = '20131230'; WHILE @BeginDate<='20171231' BEGIN SELECT dbo.ChangeIt(@BeginDate) --@BeginDate SET @BeginDate=DATEADD(DAY,1,@BeginDate); end update BI_Dim_Date set Dim_Week=Dim_Week-1 where WeekDayEN='Sun' select * from BI_Dim_Date
连表更新
ALTER TABLE bi_dim_date ALTER COLUMN Event_name [varchar](100) update bi_dim_date SET Event_name= ename from bi_dim_date,TempDayOff WHERE DateKey=TempDayOff.Bdate
用case...when 更新
update BI_Dim_Date set MonthEN=( case when Dim_Month= 1 then 'Jan' when Dim_Month= 2 then 'Feb' when Dim_Month= 3 then 'Mar' when Dim_Month= 4 then 'Apr' when Dim_Month= 5 then 'May' when Dim_Month= 6 then 'Jun' when Dim_Month= 7 then 'Jul' when Dim_Month= 8 then 'Aug' when Dim_Month= 9 then 'Sept' when Dim_Month= 10 then 'Oct' when Dim_Month= 11 then 'Nov' when Dim_Month= 12 then 'Dec' end update BI_Dim_Date set MonthEN=( case when Dim_Month= 1 then 'Jan' when Dim_Month= 2 then 'Feb' when Dim_Month= 3 then 'Mar' when Dim_Month= 4 then 'Apr' when Dim_Month= 5 then 'May' when Dim_Month= 6 then 'Jun' when Dim_Month= 7 then 'Jul' when Dim_Month= 8 then 'Aug' when Dim_Month= 9 then 'Sept' when Dim_Month= 10 then 'Oct' when Dim_Month= 11 then 'Nov' else 'Dec' end ) update BI_Dim_Date set MonthEN=( case Dim_Month when 1 then 'Jan' when 2 then 'Feb' when 3 then 'Mar' when 4 then 'Apr' when 5 then 'May' when 6 then 'Jun' when 7 then 'Jul' when 8 then 'Aug' when 9 then 'Sept' when 10 then 'Oct' when 11 then 'Nov' else 'Dec' end )
最大与最小
select MIN(cc.DateKey) aa, MAX(cc.DateKey) bb from( select DateKey from BI_Dim_Date where Dim_Year=2014 and Dim_Month=11 ) cc
查询每个区的前两条
select * from (select *, row_number() over(partition by area_name order by area_name ) aa FROM db_bi) t where t.aa<=2
字符串的截取 见贴:http://bbs.csdn.net/topics/390946681
---新建表 if OBJECT_ID('test') is not null drop table test go create table test ( id int, name varchar(10), [key] varchar(20) ) go --插入数据 insert test select 1,'lisa','li,is,sa' union all select 2,'sophia','ab,cd,ef' union all select 3,'lori','12,34,23' go select * from test /** master..spt_values是数字辅助表,里面是1,2,3,4... charindex是查找key中‘,’的位置(从第number)位开始找 substring是从第number位开始取字符串,截止位置是charindex中得出的‘,’的位置 所要实现的功能是,取出key中的以‘,’分开的值**/ select id, a.name, SUBSTRING([key],number,CHARINDEX(',',[key]+',',number)-number) as [key] from test a,master..spt_values where number >=1 and number<=len([key]) and type='p' and substring(','+[key],number,1)=',' select * from master..spt_values where type='p'
递归查询
----2008递归 由父项递归到子项 查询父ID为wID的 with cte(ID,PID) AS( --父项 select * from DIGUI where PID='wID' union all --递归结果集中的下级 select t.ID,t.PID from DIGUI as t inner join cte as c on t.PID=c.id ) select * from cte ---由子项递归到父项 查询所有子ID=kssID的 with cte(ID,PID) AS( --下一级父项 select * from DIGUI where ID='kssID' union all --递归结果集中的父项 select t.ID,t.PID from DIGUI as t inner join cte as c on t.ID=c.PID ) select * from cte
标签:sqlserver
原文地址:http://blog.csdn.net/bailin0007/article/details/41476259