呵呵,这个还是经常要用到的,记载下下。查找到的和现用的记录下:
C#
int year = DateTime.Now.Year;
int month = DateTime.Now.Month;
DateTime firstDayOfThisMonth = new DateTime(year, month, 1);
DateTime lastDayOfThisMonth = new DateTime(year, month, DateTime.DaysInMonth(year, month));
若是字符串形式的第一天还可以用这种形式:
string FirstDate =DateTime.Now.ToString("yyyy-MM-01");
下面的这个SQL的还没有测试的呢!
SQL
DECLARE @NOW DATETIME
DECLARE @FistDayOfThisMonth DATETIME
DECLARE @LastDayOfThisMonth DATETIME
SET @NOW = GETDATE()
SET @FistDayOfThisMonth = @NOW - DAY(@NOW) + 1
SET @LastDayOfThisMonth = DATEADD(MONTH, 1, @NOW - DAY(@NOW) + 1) - 1
SELECT @FistDayOfThisMonth
SELECT @LastDayOfThisMonth
形式 | 语法 | 结果 | 注释 |
数字 | {0:N2} | 12.36 | |
数字 | {0:N0} | 13 | |
货币 | {0:c2} | $12.36 | |
货币 | {0:c4} | $12.3656 | |
货币 | "¥{0:N2}" | ¥12.36 | |
科学计数法 | {0:E3} | 1.23E+001 | |
百分数 | {0:P} | 12.25% | P and p present the same. |
日期 | {0:D} | 2006年11月25日 | |
日期 | {0:d} | 2006-11-25 | |
日期 | {0:f} | 2006年11月25日 10:30 | |
日期 | {0:F} | 2006年11月25日 10:30:00 | |
日期 | {0:s} | 2006-11-26 10:30:00 | |
时间 | {0:T} | 10:30:00 |
这个存储过程的作用是自动生成编号,比如我们在数据库中有个**票编号字段,该存储过程可以生成格式为头(自己定义的一个头,比如AA)+日期(形如20070401)+6位递增整数(形如002254),并且每到了新的一年后面的6位整数便会归0重新开始。其中用到了动态执行sql的方法。参数有四个,需要给出表名称,字段名称,头和一个返回值。
=============================================
--
Author: <vagerent>
--
Create date: <2006-12-14>
--
Description: <获取编码,形如HEAD20060512000001;(头+日期+6位整数)后面为六位,每新的一年编号重新
归0
>
--
=============================================
Create
PROCEDURE
[
dbo
]
.
[
mp_GetPKNo
]
@sTableName
varchar
(
50
),
@sFieldName
varchar
(
50
),
--
目标字段
@sHead
varchar
(
50
),
--
前缀,如Head等
@sPK
varchar
(
50
) out
--
输出
AS
BEGIN
declare
@dToday
datetime
,
@sToday
varchar
(
10
),
@sYear
varchar
(
10
),
@sSubID
varchar
(
20
),
@sSql
nvarchar
(
1000
);
--
动态sql一定要用
nvarchar
!!!
set
@dToday
=
getdate
();
set
@sToday
=
Convert
(
varchar
,
Year
(
@dToday
))
+
SubString
(
Convert
(
varchar
,
Month
(
@dToday
)
+
100
),
2
,
2
)
+
SubString
(
Convert
(
varchar
,
Day
(
@dToday
)
+
100
),
2
,
2
);
--
select @sToday--形如20060512
set
@sYear
=
Convert
(
varchar
(
10
),
Year
(
getdate
()))
--
select @sYear--形如2006
declare
@sHead1
varchar
(
30
),
@iHeadLength
int
;
set
@sHead1
=
@sHead
+
@sYear
;
--
形如HEAD2006
--
select @sHead1;--形如HEAD2006
set
@iHeadLength
=
Len
(
@sHead1
);
--
select @iHeadLength;--形如6
set
@sSql
=
N
'
select @sSubID=Max(SubString(
'
+
@sFieldName
+
'
,
'
+
Convert
(
varchar
(
10
),
@iHeadLength
+
5
)
+
'
,6)) from
'
+
@sTableName
+
'
where SubString(
'
+
@sFieldName
+
'
,1,
'
+
Convert
(
varchar
(
10
),
@iHeadLength
)
+
'
)=
'''
+
@sHead1
+
''''
;
--
select @sSql;--形如select
..
exec
sp_executesql
@sSql
,N
'
@sSubID varchar(20) output
'
,
@sSubID
output;

if
((
@sSubID
=
''
)
or
(
@sSubID
is
null
))
set
@sSubID
=
'
000001
'
else
begin
declare
@iSubID
int
;
set
@iSubID
=
Convert
(
int
,
@sSubID
)
+
1000001
;
set
@sSubID
=
SubString
(
Convert
(
varchar
,
@iSubID
),
2
,
6
)
end
--
select @sSubID;
set
@sPK
=
@sHead
+
@sToday
+
@sSubID
;

return
END