Sql常用语句

 MySQL

select cast((cast(sysdate()as Date) - interval 1 day) as datetime) as YesDay     获取当前时间的前一天凌晨

select * from [table] where DATE_FORMAT(ModifiedDate,'%Y-%m-%d') = '2019-01-10'  根据时间查询  

动态执行sql

SET @tb=(select GROUP_CONCAT(table.filed) from table);
SET @sql = CONCAT('SELECT * FROM ', @tb);
PREPARE st FROM @sql;
EXECUTE st;
DEALLOCATE PREPARE st;

 批量删除外键

select GROUP_CONCAT(m.shell separator ';') from  (SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' DROP FOREIGN KEY ',CONSTRAINT_NAME,'') shell
FROM information_schema.TABLE_CONSTRAINTS c 
WHERE c.TABLE_SCHEMA='erp' AND c.CONSTRAINT_TYPE='FOREIGN KEY') m;

 Sql Server

字段值拆分 a/b/c -> province:a,city:b,district:c

SELECT
    ti.name,
    PARSENAME(REPLACE([region],'/','.'),3) as province,
    PARSENAME(REPLACE([region],'/','.'),2) as city,
    PARSENAME(REPLACE([region],'/','.'),1) as district
FROM
    tmp_institution ti

日期转换

CONVERT(VARCHAR(10),GETDATE(),120) # 2019-11-20

CONVERT(VARCHAR(10),'2019-11-20T00:00',127) # 2019-11-20

省市单列值拆分成列

with pre_where as (
    SELECT id,value,row_number() over(PARTITION by id order by id) as rank
    FROM (select '1' as id,'黑龙江省-哈尔滨市' as province_city
          union all
          select '2' as id,'山东省-临沂市' as province_city) t
    CROSS APPLY STRING_SPLIT(province_city, '-')
)
select 
ps.id,
ps.value as province,
cs.value as city
from pre_where ps
inner join pre_where cs on cs.id = ps.id
where ps.rank = 1 and cs.rank = 2

 获取表字段信息

declare @structure table(
    TABLE_QUALIFIER VARCHAR(255),
    TABLE_OWNER VARCHAR(255),
    TABLE_NAME VARCHAR(255),
    COLUMN_NAME VARCHAR(255),
    DATA_TYPE VARCHAR(255),
    TYPE_NAME VARCHAR(255),
    "PRECISION" VARCHAR(255),
    "LENGTH" VARCHAR(255),
    SCALE VARCHAR(255),
    RADIX VARCHAR(255),
    NULLABLE VARCHAR(255),
    REMARKS VARCHAR(255),
    COLUMN_DEF VARCHAR(255),
    SQL_DATA_TYPE VARCHAR(255),
    SQL_DATETIME_SUB VARCHAR(255),
    CHAR_OCTET_LENGTH VARCHAR(255),
    ORDINAL_POSITION VARCHAR(255),
    IS_NULLABLE VARCHAR(255),
    SS_DATA_TYPE VARCHAR(255)
);
insert into @structure EXEC sp_columns @table_name = '%',@table_owner = 'dbo';
select
 s.column_name AS [column],
 replace(dbo.Proper(s.column_name),'_','') as property_key
from @structure s

 驼峰方法

Create Function dbo.Proper(@Data VarChar(8000))
Returns VarChar(8000)
As
Begin
  Declare @Position Int

  Select @Data = Stuff(@Data, 1, 1, LOWER(Left(@Data, 1))),
         @Position = PatIndex('%[^a-zA-Z][a-z]%', @Data COLLATE Latin1_General_Bin)

  While @Position > 0
    Select @Data = Stuff(@Data, @Position, 2, Upper(SubString(@Data, @Position, 2))),
           @Position = PatIndex('%[^a-zA-Z][a-z]%', @Data COLLATE Latin1_General_Bin)

  Return @Data
End

declare @structure table(
    TABLE_QUALIFIER VARCHAR(255),
    TABLE_OWNER VARCHAR(255),
    TABLE_NAME VARCHAR(255),
    COLUMN_NAME VARCHAR(255),
    DATA_TYPE VARCHAR(255),
    TYPE_NAME VARCHAR(255),
    "PRECISION" VARCHAR(255),
    "LENGTH" VARCHAR(255),
    SCALE VARCHAR(255),
    RADIX VARCHAR(255),
    NULLABLE VARCHAR(255),
    REMARKS VARCHAR(255),
    COLUMN_DEF VARCHAR(255),
    SQL_DATA_TYPE VARCHAR(255),
    SQL_DATETIME_SUB VARCHAR(255),
    CHAR_OCTET_LENGTH VARCHAR(255),
    ORDINAL_POSITION VARCHAR(255),
    IS_NULLABLE VARCHAR(255),
    SS_DATA_TYPE VARCHAR(255)
);
insert into @structure EXEC sp_columns @table_name = '%',@table_owner = 'dbo';
select
 s.column_name AS [column],
 replace(dbo.Proper(s.column_name),'_','') as property_key
from @structure s
where s.table_name = 'table_name'

 创建测试数据

if OBJECT_ID(N'[test_person]',N'U') is not null
    drop table [test_person];

CREATE TABLE [dbo].[test_person] (
  [id] varchar(255) NOT NULL,
  [code] varchar(255) NULL,
  [name] varchar(255) NULL,
  [age] int NULL,
  [created_time] datetime2 NULL,
  PRIMARY KEY ([id])
);

-- 取指定范围内的随机时间
declare @Date_start datetime 
declare @Date_end datetime 
set @Date_start= '2018-06-01' 
set @Date_end=getdate();

-- 取指定范围内的随机数
DECLARE @range_number INT
DECLARE @left INT
DECLARE @right INT

-- 取随机名字
DECLARE @fName TABLE(Id INT IDENTITY(1,1) PRIMARY KEY, NAME NVARCHAR(20)) -- 姓氏
DECLARE @lName TABLE(Id INT IDENTITY(1,1) PRIMARY KEY, NAME NVARCHAR(20)) -- 名字

INSERT @fName VALUES
(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
(''),(''),(''),('')

INSERT @lName VALUES 
(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),('殿'),(''),(''),(''),(''),(''),
(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),
(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),('广'),(''),
(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),(''),('鸿'),(''),(''),(''),(''),
(''),(''),(''),('');
 
SET @left = 20
 
SET @right = 50

DECLARE @n INT
SET @n=1
WHILE @n <= 10000
  BEGIN
      INSERT [test_person]([id],[code],[name],[age],[created_time])
      VALUES ( Newid(),
               '48'+ RIGHT(Cast(@n AS NVARCHAR(10)), 8),
               (SELECT RTRIM((SELECT NAME FROM @fName WHERE Id = Round(Rand()*(100-1)+1,0)))+RTRIM(LTRIM((SELECT NAME FROM @lName WHERE Id = Round(Rand()*(100-1)+1,0))))+RTRIM(LTRIM((SELECT NAME FROM @lName WHERE Id = Round(Rand()*(100-1)+1,0))))),
               (select ROUND(((@right - @left -1) * RAND() + @left), 0)),
               (select dateadd(minute,abs(checksum(newid()))%(datediff(minute,@Date_start,@Date_end)+1),@Date_start)));
      SET @n=@n + 1
  END

select
*
from test_person
原文地址:https://www.cnblogs.com/chenzhaoyu/p/9553378.html