C# VS本地Sqlserver 操作笔记

时间:2024-11-25 21:36:49

1、如何连接本地数据库

-- string Info = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\PhysicalAssetDB.mdf;Integrated Security=True";
string Info = @"Server=(LocalDB)\MSSQLLocalDB;AttachDbFileName=|DataDirectory|\PhysicalAssetDB.mdf;Integrated Security=SSPI;";
SqlConnection _myConn = new SqlConnection(Info);
_myConn.Open();

2、如何获取新插入的数据的ID

string sql += " SELECT SCOPE_IDENTITY() AS 'maxid';";//sql为原先的数据库插入语句,注意在加这个语句前不要有分号
SqlCommand mycom = null;
if (_IsTransaction)
mycom = new SqlCommand(sql, _myConn, _mytran);
else
mycom = new SqlCommand(sql, _myConn);
object num = mycom.ExecuteScalar();
int insertID = (int)num;
mycom.Dispose(); mycom = null;

3、时间戳转日期格式

SELECT DATEADD(S,1478577120,'1970-01-01 08:00:00');

dateadd函数将某个日期加上一个特定的时间间隔值后返回datetime数据类型的值。

dateadd (datepart,numer,date数据);

numer:用于与detepart相加的值。如果指定了非整数值,则将舍弃该值的小数部分。

date数据:一个用于解析为time、date、smalldatetime、datetime、datetime2、或datetimeoffset值的表达式、列表达式、用户定义的变量或字符串文字。

datepart:时间部分。下节。

select getdate()    --输出 2013-03-09 16:03:59.293
select dateadd(YYYY,10,getdate()) --加了十年 输出2023-03-09 16:04:36.893

4、日期格式转时间戳

SELECT DATEDIFF(S,'1970-01-01 08:00:00', '2017-03-23 09:04:48');

datediff函数将两个特定的日期数据相减,得到的结果可以按照detepart指定的格式返回特定的数据。

datediff(datepart,startdate,enddate)

执行中将使用enddate减以startdate的值,如果startdate晚于enddate将返回负值。执行结果如果超出整数范围将提示错误。

startdate:一个可以解析为time、date、smalldate、datetime、datetime2或datetimeoffset值的表达式、列表达式、用户定义的变量或字符串文字。

enddate:一个可以解析为time、date、smalldate、datetime、datetime2或datetimeoffset值的表达式、列表达式、用户定义的变量或字符串文字。

datepart:时间部分,下节。

select datediff(YYYY,'2011-11-11','2012-12-12')    --输出1 年份相减之后的确是1
select datediff(day,'2011-11-11','2012-12-12') --输出 397 两个日期相差的天数
select * from test where datediff(day,Rq,getdate()) = 0 --其中Rq为日期列,此行代码的意思是什么呢?getdate()减去Rq列的值为0,Rq列的值与今天相减,号数为0  

5、获取系统当前日期时间

SELECT GETDATE(),GETUTCDATE(),YEAR(GETDATE()),MONTH(GETDATE()),DAY(GETDATE());

C# VS本地Sqlserver 操作笔记

6、获取任意时间部分DatePart

datepart( datepart , date数据 );
-- datepart:特定的要返回的数据的格式代码。
-- date数据:一个可以解析为time、date、smalldatetime、datetime、datetime2或者datetimeoffset值的表达式、列表表达式、用户定义的变量或字符串文字。

Datepart取值

Datepart部分的取值如下表所示:

说明 取值
返回年度信息 Year、YYYY、YY
返回月份信息 Month、MM、M
返回日期信息 Day、DD、D
返回周信息 Week、WK、WW
返回每周星期几信息 WeekDay、DW
返回季度信息 Quarter、QQ、Q
返回一年中第几天的信息 DayOfYear、DY、Y
返回小时信息 Hour、HH
返回分钟信息 Minute、MI、N
返回秒信息 Second、SS、SS
返回毫秒信息 MillSecond、MS
SELECT DATENAME(Quarter,GetDate()); -- 输出 2(6月)
SELECT DATEPART(Quarter,GetDate()); -- 输出 1 现在是第几季度

7、时间格式转字符串

--Style=101时,表示日期字符串为:mm/dd/yyyy格式

SELECT CONVERT(datetime,'11/1/2003',101)
--结果:2003-11-01 00:00:00.000 SELECT CONVERT(varchar,'2003-11-01 00:00:00.000',101)
--结果:01/11/2003

下面列举下所有格式

0 Feb 22 2006 4:26PM 1 02/22/06
2 06.02.22 3 22/02/06
4 22.02.06 5 22-02-06
6 22 Feb 06 7 Feb 22, 06
8 16:26:08 9 Feb 22 2006 4:26:08:020PM
10 02-22-06 11 06/02/22
12 060222 13 22 Feb 2006 16:26:08:020
14 16:26:08:037 20 2006-02-22 16:26:08
20 2006-02-22 16:26:08 21 2006-02-22 16:26:08.037
22 02/22/06 4:26:08 PM 23 2006-02-22
24 16:26:08 25 2006-02-22 16:26:08.037
100 Feb 22 2006 4:26PM 101 02/22/2006
102 2006.02.22 103 22/02/2006
104 22.02.2006 105 22-02-2006
106 22 Feb 2006 107 Feb 22, 2006
108 16:26:08 109 Feb 22 2006 4:26:08:067PM
110 02-22-2006 111 2006/02/22
112 20060222 113 22 Feb 2006 16:26:08:067
114 16:26:08:067 120 2006-02-22 16:26:08
121 2006-02-22 16:26:08.080 126 2006-02-22T16:26:08.080
127 2006-02-22T16:26:08.080 130 24 ???? 1427 4:26:08:080PM
131 24/01/1427 4:26:08:080PM    

8、获取数据分组后每组的最后一条数据

ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee