1、数据库方面
先建立农历日期数据库
CREATE
TABLE
SolarData
(
yearId int not null ,
data char ( 7 ) not null ,
dataInt int not null
)
-- 插入数据
INSERT INTO
SolarData SELECT 1900 , ' 0x04bd8 ' , 19416 UNION ALL SELECT 1901 , ' 0x04ae0 ' , 19168
UNION ALL SELECT 1902 , ' 0x0a570 ' , 42352 UNION ALL SELECT 1903 , ' 0x054d5 ' , 21717
UNION ALL SELECT 1904 , ' 0x0d260 ' , 53856 UNION ALL SELECT 1905 , ' 0x0d950 ' , 55632
UNION ALL SELECT 1906 , ' 0x16554 ' , 91476 UNION ALL SELECT 1907 , ' 0x056a0 ' , 22176
UNION ALL SELECT 1908 , ' 0x09ad0 ' , 39632 UNION ALL SELECT 1909 , ' 0x055d2 ' , 21970
UNION ALL SELECT 1910 , ' 0x04ae0 ' , 19168 UNION ALL SELECT 1911 , ' 0x0a5b6 ' , 42422
UNION ALL SELECT 1912 , ' 0x0a4d0 ' , 42192 UNION ALL SELECT 1913 , ' 0x0d250 ' , 53840
UNION ALL SELECT 1914 , ' 0x1d255 ' , 119381 UNION ALL SELECT 1915 , ' 0x0b540 ' , 46400
UNION ALL SELECT 1916 , ' 0x0d6a0 ' , 54944 UNION ALL SELECT 1917 , ' 0x0ada2 ' , 44450
UNION ALL SELECT 1918 , ' 0x095b0 ' , 38320 UNION ALL SELECT 1919 , ' 0x14977 ' , 84343
UNION ALL SELECT 1920 , ' 0x04970 ' , 18800 UNION ALL SELECT 1921 , ' 0x0a4b0 ' , 42160
UNION ALL SELECT 1922 , ' 0x0b4b5 ' , 46261 UNION ALL SELECT 1923 , ' 0x06a50 ' , 27216
UNION ALL SELECT 1924 , ' 0x06d40 ' , 27968 UNION ALL SELECT 1925 , ' 0x1ab54 ' , 109396
UNION ALL SELECT 1926 , ' 0x02b60 ' , 11104 UNION ALL SELECT 1927 , ' 0x09570 ' , 38256
UNION ALL SELECT 1928 , ' 0x052f2 ' , 21234 UNION ALL SELECT 1929 , ' 0x04970 ' , 18800
UNION ALL SELECT 1930 , ' 0x06566 ' , 25958 UNION ALL SELECT 1931 , ' 0x0d4a0 ' , 54432
UNION ALL SELECT 1932 , ' 0x0ea50 ' , 59984 UNION ALL SELECT 1933 , ' 0x06e95 ' , 28309
UNION ALL SELECT 1934 , ' 0x05ad0 ' , 23248 UNION ALL SELECT 1935 , ' 0x02b60 ' , 11104
UNION ALL SELECT 1936 , ' 0x186e3 ' , 100067 UNION ALL SELECT 1937 , ' 0x092e0 ' , 37600
UNION ALL SELECT 1938 , ' 0x1c8d7 ' , 116951 UNION ALL SELECT 1939 , ' 0x0c950 ' , 51536
UNION ALL SELECT 1940 , ' 0x0d4a0 ' , 54432 UNION ALL SELECT 1941 , ' 0x1d8a6 ' , 120998
UNION ALL SELECT 1942 , ' 0x0b550 ' , 46416 UNION ALL SELECT 1943 , ' 0x056a0 ' , 22176
UNION ALL SELECT 1944 , ' 0x1a5b4 ' , 107956 UNION ALL SELECT 1945 , ' 0x025d0 ' , 9680
UNION ALL SELECT 1946 , ' 0x092d0 ' , 37584 UNION ALL SELECT 1947 , ' 0x0d2b2 ' , 53938
UNION ALL SELECT 1948 , ' 0x0a950 ' , 43344 UNION ALL SELECT 1949 , ' 0x0b557 ' , 46423
UNION ALL SELECT 1950 , ' 0x06ca0 ' , 27808 UNION ALL SELECT 1951 , ' 0x0b550 ' , 46416
UNION ALL SELECT 1952 , ' 0x15355 ' , 86869 UNION ALL SELECT 1953 , ' 0x04da0 ' , 19872
UNION ALL SELECT 1954 , ' 0x0a5d0 ' , 42448 UNION ALL SELECT 1955 , ' 0x14573 ' , 83315
UNION ALL SELECT 1956 , ' 0x052d0 ' , 21200 UNION ALL SELECT 1957 , ' 0x0a9a8 ' , 43432
UNION ALL SELECT 1958 , ' 0x0e950 ' , 59728 UNION ALL SELECT 1959 , ' 0x06aa0 ' , 27296
UNION ALL SELECT 1960 , ' 0x0aea6 ' , 44710 UNION ALL SELECT 1961 , ' 0x0ab50 ' , 43856
UNION ALL SELECT 1962 , ' 0x04b60 ' , 19296 UNION ALL SELECT 1963 , ' 0x0aae4 ' , 43748
UNION ALL SELECT 1964 , ' 0x0a570 ' , 42352 UNION ALL SELECT 1965 , ' 0x05260 ' , 21088
UNION ALL SELECT 1966 , ' 0x0f263 ' , 62051 UNION ALL SELECT 1967 , ' 0x0d950 ' , 55632
UNION ALL SELECT 1968 , ' 0x05b57 ' , 23383 UNION ALL SELECT 1969 , ' 0x056a0 ' , 22176
UNION ALL SELECT 1970 , ' 0x096d0 ' , 38608 UNION ALL SELECT 1971 , ' 0x04dd5 ' , 19925
UNION ALL SELECT 1972 , ' 0x04ad0 ' , 19152 UNION ALL SELECT 1973 , ' 0x0a4d0 ' , 42192
UNION ALL SELECT 1974 , ' 0x0d4d4 ' , 54484 UNION ALL SELECT 1975 , ' 0x0d250 ' , 53840
UNION ALL SELECT 1976 , ' 0x0d558 ' , 54616 UNION ALL SELECT 1977 , ' 0x0b540 ' , 46400
UNION ALL SELECT 1978 , ' 0x0b5a0 ' , 46496 UNION ALL SELECT 1979 , ' 0x195a6 ' , 103846
UNION ALL SELECT 1980 , ' 0x095b0 ' , 38320 UNION ALL SELECT 1981 , ' 0x049b0 ' , 18864
UNION ALL SELECT 1982 , ' 0x0a974 ' , 43380 UNION ALL SELECT 1983 , ' 0x0a4b0 ' , 42160
UNION ALL SELECT 1984 , ' 0x0b27a ' , 45690 UNION ALL SELECT 1985 , ' 0x06a50 ' , 27216
UNION ALL SELECT 1986 , ' 0x06d40 ' , 27968 UNION ALL SELECT 1987 , ' 0x0af46 ' , 44870
UNION ALL SELECT 1988 , ' 0x0ab60 ' , 43872 UNION ALL SELECT 1989 , ' 0x09570 ' , 38256
UNION ALL SELECT 1990 , ' 0x04af5 ' , 19189 UNION ALL SELECT 1991 , ' 0x04970 ' , 18800
UNION ALL SELECT 1992 , ' 0x064b0 ' , 25776 UNION ALL SELECT 1993 , ' 0x074a3 ' , 29859
UNION ALL SELECT 1994 , ' 0x0ea50 ' , 59984 UNION ALL SELECT 1995 , ' 0x06b58 ' , 27480
UNION ALL SELECT 1996 , ' 0x055c0 ' , 21952 UNION ALL SELECT 1997 , ' 0x0ab60 ' , 43872
UNION ALL SELECT 1998 , ' 0x096d5 ' , 38613 UNION ALL SELECT 1999 , ' 0x092e0 ' , 37600
UNION ALL SELECT 2000 , ' 0x0c960 ' , 51552 UNION ALL SELECT 2001 , ' 0x0d954 ' , 55636
UNION ALL SELECT 2002 , ' 0x0d4a0 ' , 54432 UNION ALL SELECT 2003 , ' 0x0da50 ' , 55888
UNION ALL SELECT 2004 , ' 0x07552 ' , 30034 UNION ALL SELECT 2005 , ' 0x056a0 ' , 22176
UNION ALL SELECT 2006 , ' 0x0abb7 ' , 43959 UNION ALL SELECT 2007 , ' 0x025d0 ' , 9680
UNION ALL SELECT 2008 , ' 0x092d0 ' , 37584 UNION ALL SELECT 2009 , ' 0x0cab5 ' , 51893
UNION ALL SELECT 2010 , ' 0x0a950 ' , 43344 UNION ALL SELECT 2011 , ' 0x0b4a0 ' , 46240
UNION ALL SELECT 2012 , ' 0x0baa4 ' , 47780 UNION ALL SELECT 2013 , ' 0x0ad50 ' , 44368
UNION ALL SELECT 2014 , ' 0x055d9 ' , 21977 UNION ALL SELECT 2015 , ' 0x04ba0 ' , 19360
UNION ALL SELECT 2016 , ' 0x0a5b0 ' , 42416 UNION ALL SELECT 2017 , ' 0x15176 ' , 86390
UNION ALL SELECT 2018 , ' 0x052b0 ' , 21168 UNION ALL SELECT 2019 , ' 0x0a930 ' , 43312
UNION ALL SELECT 2020 , ' 0x07954 ' , 31060 UNION ALL SELECT 2021 , ' 0x06aa0 ' , 27296
UNION ALL SELECT 2022 , ' 0x0ad50 ' , 44368 UNION ALL SELECT 2023 , ' 0x05b52 ' , 23378
UNION ALL SELECT 2024 , ' 0x04b60 ' , 19296 UNION ALL SELECT 2025 , ' 0x0a6e6 ' , 42726
UNION ALL SELECT 2026 , ' 0x0a4e0 ' , 42208 UNION ALL SELECT 2027 , ' 0x0d260 ' , 53856
UNION ALL SELECT 2028 , ' 0x0ea65 ' , 60005 UNION ALL SELECT 2029 , ' 0x0d530 ' , 54576
UNION ALL SELECT 2030 , ' 0x05aa0 ' , 23200 UNION ALL SELECT 2031 , ' 0x076a3 ' , 30371
UNION ALL SELECT 2032 , ' 0x096d0 ' , 38608 UNION ALL SELECT 2033 , ' 0x04bd7 ' , 19415
UNION ALL SELECT 2034 , ' 0x04ad0 ' , 19152 UNION ALL SELECT 2035 , ' 0x0a4d0 ' , 42192
UNION ALL SELECT 2036 , ' 0x1d0b6 ' , 118966 UNION ALL SELECT 2037 , ' 0x0d250 ' , 53840
UNION ALL SELECT 2038 , ' 0x0d520 ' , 54560 UNION ALL SELECT 2039 , ' 0x0dd45 ' , 56645
UNION ALL SELECT 2040 , ' 0x0b5a0 ' , 46496 UNION ALL SELECT 2041 , ' 0x056d0 ' , 22224
UNION ALL SELECT 2042 , ' 0x055b2 ' , 21938 UNION ALL SELECT 2043 , ' 0x049b0 ' , 18864
UNION ALL SELECT 2044 , ' 0x0a577 ' , 42359 UNION ALL SELECT 2045 , ' 0x0a4b0 ' , 42160
UNION ALL SELECT 2046 , ' 0x0aa50 ' , 43600 UNION ALL SELECT 2047 , ' 0x1b255 ' , 111189
UNION ALL SELECT 2048 , ' 0x06d20 ' , 27936 UNION ALL SELECT 2049 , ' 0x0ada0 ' , 44448
(
yearId int not null ,
data char ( 7 ) not null ,
dataInt int not null
)
-- 插入数据
INSERT INTO
SolarData SELECT 1900 , ' 0x04bd8 ' , 19416 UNION ALL SELECT 1901 , ' 0x04ae0 ' , 19168
UNION ALL SELECT 1902 , ' 0x0a570 ' , 42352 UNION ALL SELECT 1903 , ' 0x054d5 ' , 21717
UNION ALL SELECT 1904 , ' 0x0d260 ' , 53856 UNION ALL SELECT 1905 , ' 0x0d950 ' , 55632
UNION ALL SELECT 1906 , ' 0x16554 ' , 91476 UNION ALL SELECT 1907 , ' 0x056a0 ' , 22176
UNION ALL SELECT 1908 , ' 0x09ad0 ' , 39632 UNION ALL SELECT 1909 , ' 0x055d2 ' , 21970
UNION ALL SELECT 1910 , ' 0x04ae0 ' , 19168 UNION ALL SELECT 1911 , ' 0x0a5b6 ' , 42422
UNION ALL SELECT 1912 , ' 0x0a4d0 ' , 42192 UNION ALL SELECT 1913 , ' 0x0d250 ' , 53840
UNION ALL SELECT 1914 , ' 0x1d255 ' , 119381 UNION ALL SELECT 1915 , ' 0x0b540 ' , 46400
UNION ALL SELECT 1916 , ' 0x0d6a0 ' , 54944 UNION ALL SELECT 1917 , ' 0x0ada2 ' , 44450
UNION ALL SELECT 1918 , ' 0x095b0 ' , 38320 UNION ALL SELECT 1919 , ' 0x14977 ' , 84343
UNION ALL SELECT 1920 , ' 0x04970 ' , 18800 UNION ALL SELECT 1921 , ' 0x0a4b0 ' , 42160
UNION ALL SELECT 1922 , ' 0x0b4b5 ' , 46261 UNION ALL SELECT 1923 , ' 0x06a50 ' , 27216
UNION ALL SELECT 1924 , ' 0x06d40 ' , 27968 UNION ALL SELECT 1925 , ' 0x1ab54 ' , 109396
UNION ALL SELECT 1926 , ' 0x02b60 ' , 11104 UNION ALL SELECT 1927 , ' 0x09570 ' , 38256
UNION ALL SELECT 1928 , ' 0x052f2 ' , 21234 UNION ALL SELECT 1929 , ' 0x04970 ' , 18800
UNION ALL SELECT 1930 , ' 0x06566 ' , 25958 UNION ALL SELECT 1931 , ' 0x0d4a0 ' , 54432
UNION ALL SELECT 1932 , ' 0x0ea50 ' , 59984 UNION ALL SELECT 1933 , ' 0x06e95 ' , 28309
UNION ALL SELECT 1934 , ' 0x05ad0 ' , 23248 UNION ALL SELECT 1935 , ' 0x02b60 ' , 11104
UNION ALL SELECT 1936 , ' 0x186e3 ' , 100067 UNION ALL SELECT 1937 , ' 0x092e0 ' , 37600
UNION ALL SELECT 1938 , ' 0x1c8d7 ' , 116951 UNION ALL SELECT 1939 , ' 0x0c950 ' , 51536
UNION ALL SELECT 1940 , ' 0x0d4a0 ' , 54432 UNION ALL SELECT 1941 , ' 0x1d8a6 ' , 120998
UNION ALL SELECT 1942 , ' 0x0b550 ' , 46416 UNION ALL SELECT 1943 , ' 0x056a0 ' , 22176
UNION ALL SELECT 1944 , ' 0x1a5b4 ' , 107956 UNION ALL SELECT 1945 , ' 0x025d0 ' , 9680
UNION ALL SELECT 1946 , ' 0x092d0 ' , 37584 UNION ALL SELECT 1947 , ' 0x0d2b2 ' , 53938
UNION ALL SELECT 1948 , ' 0x0a950 ' , 43344 UNION ALL SELECT 1949 , ' 0x0b557 ' , 46423
UNION ALL SELECT 1950 , ' 0x06ca0 ' , 27808 UNION ALL SELECT 1951 , ' 0x0b550 ' , 46416
UNION ALL SELECT 1952 , ' 0x15355 ' , 86869 UNION ALL SELECT 1953 , ' 0x04da0 ' , 19872
UNION ALL SELECT 1954 , ' 0x0a5d0 ' , 42448 UNION ALL SELECT 1955 , ' 0x14573 ' , 83315
UNION ALL SELECT 1956 , ' 0x052d0 ' , 21200 UNION ALL SELECT 1957 , ' 0x0a9a8 ' , 43432
UNION ALL SELECT 1958 , ' 0x0e950 ' , 59728 UNION ALL SELECT 1959 , ' 0x06aa0 ' , 27296
UNION ALL SELECT 1960 , ' 0x0aea6 ' , 44710 UNION ALL SELECT 1961 , ' 0x0ab50 ' , 43856
UNION ALL SELECT 1962 , ' 0x04b60 ' , 19296 UNION ALL SELECT 1963 , ' 0x0aae4 ' , 43748
UNION ALL SELECT 1964 , ' 0x0a570 ' , 42352 UNION ALL SELECT 1965 , ' 0x05260 ' , 21088
UNION ALL SELECT 1966 , ' 0x0f263 ' , 62051 UNION ALL SELECT 1967 , ' 0x0d950 ' , 55632
UNION ALL SELECT 1968 , ' 0x05b57 ' , 23383 UNION ALL SELECT 1969 , ' 0x056a0 ' , 22176
UNION ALL SELECT 1970 , ' 0x096d0 ' , 38608 UNION ALL SELECT 1971 , ' 0x04dd5 ' , 19925
UNION ALL SELECT 1972 , ' 0x04ad0 ' , 19152 UNION ALL SELECT 1973 , ' 0x0a4d0 ' , 42192
UNION ALL SELECT 1974 , ' 0x0d4d4 ' , 54484 UNION ALL SELECT 1975 , ' 0x0d250 ' , 53840
UNION ALL SELECT 1976 , ' 0x0d558 ' , 54616 UNION ALL SELECT 1977 , ' 0x0b540 ' , 46400
UNION ALL SELECT 1978 , ' 0x0b5a0 ' , 46496 UNION ALL SELECT 1979 , ' 0x195a6 ' , 103846
UNION ALL SELECT 1980 , ' 0x095b0 ' , 38320 UNION ALL SELECT 1981 , ' 0x049b0 ' , 18864
UNION ALL SELECT 1982 , ' 0x0a974 ' , 43380 UNION ALL SELECT 1983 , ' 0x0a4b0 ' , 42160
UNION ALL SELECT 1984 , ' 0x0b27a ' , 45690 UNION ALL SELECT 1985 , ' 0x06a50 ' , 27216
UNION ALL SELECT 1986 , ' 0x06d40 ' , 27968 UNION ALL SELECT 1987 , ' 0x0af46 ' , 44870
UNION ALL SELECT 1988 , ' 0x0ab60 ' , 43872 UNION ALL SELECT 1989 , ' 0x09570 ' , 38256
UNION ALL SELECT 1990 , ' 0x04af5 ' , 19189 UNION ALL SELECT 1991 , ' 0x04970 ' , 18800
UNION ALL SELECT 1992 , ' 0x064b0 ' , 25776 UNION ALL SELECT 1993 , ' 0x074a3 ' , 29859
UNION ALL SELECT 1994 , ' 0x0ea50 ' , 59984 UNION ALL SELECT 1995 , ' 0x06b58 ' , 27480
UNION ALL SELECT 1996 , ' 0x055c0 ' , 21952 UNION ALL SELECT 1997 , ' 0x0ab60 ' , 43872
UNION ALL SELECT 1998 , ' 0x096d5 ' , 38613 UNION ALL SELECT 1999 , ' 0x092e0 ' , 37600
UNION ALL SELECT 2000 , ' 0x0c960 ' , 51552 UNION ALL SELECT 2001 , ' 0x0d954 ' , 55636
UNION ALL SELECT 2002 , ' 0x0d4a0 ' , 54432 UNION ALL SELECT 2003 , ' 0x0da50 ' , 55888
UNION ALL SELECT 2004 , ' 0x07552 ' , 30034 UNION ALL SELECT 2005 , ' 0x056a0 ' , 22176
UNION ALL SELECT 2006 , ' 0x0abb7 ' , 43959 UNION ALL SELECT 2007 , ' 0x025d0 ' , 9680
UNION ALL SELECT 2008 , ' 0x092d0 ' , 37584 UNION ALL SELECT 2009 , ' 0x0cab5 ' , 51893
UNION ALL SELECT 2010 , ' 0x0a950 ' , 43344 UNION ALL SELECT 2011 , ' 0x0b4a0 ' , 46240
UNION ALL SELECT 2012 , ' 0x0baa4 ' , 47780 UNION ALL SELECT 2013 , ' 0x0ad50 ' , 44368
UNION ALL SELECT 2014 , ' 0x055d9 ' , 21977 UNION ALL SELECT 2015 , ' 0x04ba0 ' , 19360
UNION ALL SELECT 2016 , ' 0x0a5b0 ' , 42416 UNION ALL SELECT 2017 , ' 0x15176 ' , 86390
UNION ALL SELECT 2018 , ' 0x052b0 ' , 21168 UNION ALL SELECT 2019 , ' 0x0a930 ' , 43312
UNION ALL SELECT 2020 , ' 0x07954 ' , 31060 UNION ALL SELECT 2021 , ' 0x06aa0 ' , 27296
UNION ALL SELECT 2022 , ' 0x0ad50 ' , 44368 UNION ALL SELECT 2023 , ' 0x05b52 ' , 23378
UNION ALL SELECT 2024 , ' 0x04b60 ' , 19296 UNION ALL SELECT 2025 , ' 0x0a6e6 ' , 42726
UNION ALL SELECT 2026 , ' 0x0a4e0 ' , 42208 UNION ALL SELECT 2027 , ' 0x0d260 ' , 53856
UNION ALL SELECT 2028 , ' 0x0ea65 ' , 60005 UNION ALL SELECT 2029 , ' 0x0d530 ' , 54576
UNION ALL SELECT 2030 , ' 0x05aa0 ' , 23200 UNION ALL SELECT 2031 , ' 0x076a3 ' , 30371
UNION ALL SELECT 2032 , ' 0x096d0 ' , 38608 UNION ALL SELECT 2033 , ' 0x04bd7 ' , 19415
UNION ALL SELECT 2034 , ' 0x04ad0 ' , 19152 UNION ALL SELECT 2035 , ' 0x0a4d0 ' , 42192
UNION ALL SELECT 2036 , ' 0x1d0b6 ' , 118966 UNION ALL SELECT 2037 , ' 0x0d250 ' , 53840
UNION ALL SELECT 2038 , ' 0x0d520 ' , 54560 UNION ALL SELECT 2039 , ' 0x0dd45 ' , 56645
UNION ALL SELECT 2040 , ' 0x0b5a0 ' , 46496 UNION ALL SELECT 2041 , ' 0x056d0 ' , 22224
UNION ALL SELECT 2042 , ' 0x055b2 ' , 21938 UNION ALL SELECT 2043 , ' 0x049b0 ' , 18864
UNION ALL SELECT 2044 , ' 0x0a577 ' , 42359 UNION ALL SELECT 2045 , ' 0x0a4b0 ' , 42160
UNION ALL SELECT 2046 , ' 0x0aa50 ' , 43600 UNION ALL SELECT 2047 , ' 0x1b255 ' , 111189
UNION ALL SELECT 2048 , ' 0x06d20 ' , 27936 UNION ALL SELECT 2049 , ' 0x0ada0 ' , 44448
SQL函数
--加此函数的目的是把数字换大写
CREATE
FUNCTION
[
dbo
]
.
[
f_num_str
]
(
@num
int
)
RETURNS varchar ( 100 )
AS
BEGIN
DECLARE @n_str VARCHAR ( 20 ), @re VARCHAR ( 20 ), @i int
SELECT @n_str = cast ( @num as varchar ), @i = 1 , @re = ''
WHILE @i <= len ( @n_str )
BEGIN
SET @re = @re + SUBSTRING ( ' 零一二三四五六七八九 ' , CAST ( SUBSTRING ( @n_str , @i , 1 ) AS int ) + 1 , 1 )
SET @i = @i + 1
END
RETURN @re
END
RETURNS varchar ( 100 )
AS
BEGIN
DECLARE @n_str VARCHAR ( 20 ), @re VARCHAR ( 20 ), @i int
SELECT @n_str = cast ( @num as varchar ), @i = 1 , @re = ''
WHILE @i <= len ( @n_str )
BEGIN
SET @re = @re + SUBSTRING ( ' 零一二三四五六七八九 ' , CAST ( SUBSTRING ( @n_str , @i , 1 ) AS int ) + 1 , 1 )
SET @i = @i + 1
END
RETURN @re
END
存储过程
CREATE
PROCEDURE
GetLunar_zhangzs
@solarDay DATETIME
AS
DECLARE @solData int
DECLARE @offset int
DECLARE @iLunar int
DECLARE @i INT
DECLARE @j INT
DECLARE @yDays int
DECLARE @mDays int
DECLARE @mLeap int
DECLARE @mLeapNum int
DECLARE @bLeap smallint
DECLARE @temp int
DECLARE @YEAR INT
DECLARE @MONTH INT
DECLARE @DAY INT
DECLARE @OUTPUTDATE varchar ( 10 )
-- 保证传进来的日期是不带时间
SET @solarDay = cast ( @solarDay AS char ( 10 ))
SET @offset = CAST ( @solarDay - ' 1900-01-30 ' AS INT )
-- 确定农历年开始
SET @i = 1900
-- SET @offset=@solData
WHILE @i < 2050 AND @offset > 0
BEGIN
SET @yDays = 348
SET @mLeapNum = 0
SELECT @iLunar = dataInt FROM SolarData WHERE yearId = @i
-- 传回农历年的总天数
SET @j = 32768
WHILE @j > 8
BEGIN
IF @iLunar & @j > 0
SET @yDays = @yDays + 1
SET @j = @j / 2
END
-- 传回农历年闰哪个月 1-12 , 没闰传回 0
SET @mLeap = @iLunar & 15
-- 传回农历年闰月的天数 ,加在年的总天数上
IF @mLeap > 0
BEGIN
IF @iLunar & 65536 > 0
SET @mLeapNum = 30
ELSE
SET @mLeapNum = 29
SET @yDays = @yDays + @mLeapNum
END
SET @offset = @offset - @yDays
SET @i = @i + 1
END
IF @offset <= 0
BEGIN
SET @offset = @offset + @yDays
SET @i = @i - 1
END
-- 确定农历年结束
SET @YEAR = @i
-- 确定农历月开始
SET @i = 1
SELECT @iLunar = dataInt FROM SolarData WHERE yearId = @YEAR
-- 判断那个月是润月
SET @mLeap = @iLunar & 15
SET @bLeap = 0
WHILE @i < 13 AND @offset > 0
BEGIN
-- 判断润月
SET @mDays = 0
IF ( @mLeap > 0 AND @i = ( @mLeap + 1 ) AND @bLeap = 0 )
BEGIN -- 是润月
SET @i = @i - 1
SET @bLeap = 1
-- 传回农历年闰月的天数
IF @iLunar & 65536 > 0
SET @mDays = 30
ELSE
SET @mDays = 29
END
ELSE
-- 不是润月
BEGIN
SET @j = 1
SET @temp = 65536
WHILE @j <= @i
BEGIN
SET @temp = @temp / 2
SET @j = @j + 1
END
IF @iLunar & @temp > 0
SET @mDays = 30
ELSE
SET @mDays = 29
END
-- 解除闰月
IF @bLeap = 1 AND @i = ( @mLeap + 1 )
SET @bLeap = 0
SET @offset = @offset - @mDays
SET @i = @i + 1
END
IF @offset <= 0
BEGIN
SET @offset = @offset + @mDays
SET @i = @i - 1
END
-- 确定农历月结束
SET @MONTH = @i
-- 确定农历日结束
SET @DAY = @offset
SET @OUTPUTDATE = convert ( varchar ( 10 ), CAST (( CAST ( @YEAR AS VARCHAR ( 4 )) + ' - ' + CAST ( @MONTH AS VARCHAR ( 2 )) + ' - ' + CAST ( @DAY AS VARCHAR ( 2 ))) AS DATETIME ) , 120 )
select convert ( varchar ( 10 ), @solarDay , 120 ) as 阳历
, cast (dbo.f_num_str( year ( @OUTPUTDATE )) as varchar ( 8 )) + ' 年| ' +
case when datalength (dbo.f_num_str( month ( @OUTPUTDATE ))) = 4 then case when left (dbo.f_num_str( month ( @OUTPUTDATE )), 1 ) <> ' 一 '
then left ( month ( @OUTPUTDATE ), 1 ) else '' end + ' 十 ' + case when right (dbo.f_num_str( month ( @OUTPUTDATE )), 1 ) = ' 零 ' then '' else right (dbo.f_num_str( month ( @OUTPUTDATE )), 1 ) end else
cast (dbo.f_num_str( month ( @OUTPUTDATE )) as varchar ( 4 )) end + ' 月| '
+ case when datalength (dbo.f_num_str( day ( @OUTPUTDATE ))) = 4 then case when cast (dbo.f_num_str( day ( @OUTPUTDATE ) ) as varchar ( 4 )) = ' 一零 ' then ' 初 ' else ( case when left ( cast (dbo.f_num_str( day ( @OUTPUTDATE ) ) as varchar ( 4 )), 1 ) <> ' 一 '
then left ( cast (dbo.f_num_str( day ( @OUTPUTDATE ) ) as varchar ( 4 )), 1 ) else '' end ) end + ' 十 ' + case when right ( cast (dbo.f_num_str( day ( @OUTPUTDATE ) ) as varchar ( 4 )), 1 ) = ' 零 ' then '' else
right ( cast (dbo.f_num_str( day ( @OUTPUTDATE ) ) as varchar ( 4 )), 1 ) end else ' 初 ' + cast (dbo.f_num_str( day ( @OUTPUTDATE ) ) as varchar ( 4 )) end as 阴历
GO
@solarDay DATETIME
AS
DECLARE @solData int
DECLARE @offset int
DECLARE @iLunar int
DECLARE @i INT
DECLARE @j INT
DECLARE @yDays int
DECLARE @mDays int
DECLARE @mLeap int
DECLARE @mLeapNum int
DECLARE @bLeap smallint
DECLARE @temp int
DECLARE @YEAR INT
DECLARE @MONTH INT
DECLARE @DAY INT
DECLARE @OUTPUTDATE varchar ( 10 )
-- 保证传进来的日期是不带时间
SET @solarDay = cast ( @solarDay AS char ( 10 ))
SET @offset = CAST ( @solarDay - ' 1900-01-30 ' AS INT )
-- 确定农历年开始
SET @i = 1900
-- SET @offset=@solData
WHILE @i < 2050 AND @offset > 0
BEGIN
SET @yDays = 348
SET @mLeapNum = 0
SELECT @iLunar = dataInt FROM SolarData WHERE yearId = @i
-- 传回农历年的总天数
SET @j = 32768
WHILE @j > 8
BEGIN
IF @iLunar & @j > 0
SET @yDays = @yDays + 1
SET @j = @j / 2
END
-- 传回农历年闰哪个月 1-12 , 没闰传回 0
SET @mLeap = @iLunar & 15
-- 传回农历年闰月的天数 ,加在年的总天数上
IF @mLeap > 0
BEGIN
IF @iLunar & 65536 > 0
SET @mLeapNum = 30
ELSE
SET @mLeapNum = 29
SET @yDays = @yDays + @mLeapNum
END
SET @offset = @offset - @yDays
SET @i = @i + 1
END
IF @offset <= 0
BEGIN
SET @offset = @offset + @yDays
SET @i = @i - 1
END
-- 确定农历年结束
SET @YEAR = @i
-- 确定农历月开始
SET @i = 1
SELECT @iLunar = dataInt FROM SolarData WHERE yearId = @YEAR
-- 判断那个月是润月
SET @mLeap = @iLunar & 15
SET @bLeap = 0
WHILE @i < 13 AND @offset > 0
BEGIN
-- 判断润月
SET @mDays = 0
IF ( @mLeap > 0 AND @i = ( @mLeap + 1 ) AND @bLeap = 0 )
BEGIN -- 是润月
SET @i = @i - 1
SET @bLeap = 1
-- 传回农历年闰月的天数
IF @iLunar & 65536 > 0
SET @mDays = 30
ELSE
SET @mDays = 29
END
ELSE
-- 不是润月
BEGIN
SET @j = 1
SET @temp = 65536
WHILE @j <= @i
BEGIN
SET @temp = @temp / 2
SET @j = @j + 1
END
IF @iLunar & @temp > 0
SET @mDays = 30
ELSE
SET @mDays = 29
END
-- 解除闰月
IF @bLeap = 1 AND @i = ( @mLeap + 1 )
SET @bLeap = 0
SET @offset = @offset - @mDays
SET @i = @i + 1
END
IF @offset <= 0
BEGIN
SET @offset = @offset + @mDays
SET @i = @i - 1
END
-- 确定农历月结束
SET @MONTH = @i
-- 确定农历日结束
SET @DAY = @offset
SET @OUTPUTDATE = convert ( varchar ( 10 ), CAST (( CAST ( @YEAR AS VARCHAR ( 4 )) + ' - ' + CAST ( @MONTH AS VARCHAR ( 2 )) + ' - ' + CAST ( @DAY AS VARCHAR ( 2 ))) AS DATETIME ) , 120 )
select convert ( varchar ( 10 ), @solarDay , 120 ) as 阳历
, cast (dbo.f_num_str( year ( @OUTPUTDATE )) as varchar ( 8 )) + ' 年| ' +
case when datalength (dbo.f_num_str( month ( @OUTPUTDATE ))) = 4 then case when left (dbo.f_num_str( month ( @OUTPUTDATE )), 1 ) <> ' 一 '
then left ( month ( @OUTPUTDATE ), 1 ) else '' end + ' 十 ' + case when right (dbo.f_num_str( month ( @OUTPUTDATE )), 1 ) = ' 零 ' then '' else right (dbo.f_num_str( month ( @OUTPUTDATE )), 1 ) end else
cast (dbo.f_num_str( month ( @OUTPUTDATE )) as varchar ( 4 )) end + ' 月| '
+ case when datalength (dbo.f_num_str( day ( @OUTPUTDATE ))) = 4 then case when cast (dbo.f_num_str( day ( @OUTPUTDATE ) ) as varchar ( 4 )) = ' 一零 ' then ' 初 ' else ( case when left ( cast (dbo.f_num_str( day ( @OUTPUTDATE ) ) as varchar ( 4 )), 1 ) <> ' 一 '
then left ( cast (dbo.f_num_str( day ( @OUTPUTDATE ) ) as varchar ( 4 )), 1 ) else '' end ) end + ' 十 ' + case when right ( cast (dbo.f_num_str( day ( @OUTPUTDATE ) ) as varchar ( 4 )), 1 ) = ' 零 ' then '' else
right ( cast (dbo.f_num_str( day ( @OUTPUTDATE ) ) as varchar ( 4 )), 1 ) end else ' 初 ' + cast (dbo.f_num_str( day ( @OUTPUTDATE ) ) as varchar ( 4 )) end as 阴历
GO
2、页面级JS处理
要调用的JS,包括一个日期控件和农历类库 就此下载
页面级代码
function
setCNDate()
{
var lbnl=document.getElementById("lbNLBirthDay");
var hidnl=document.getElementById("hidNLBirthDay");
var span=document.getElementById('nl');
lbnl.innerText=span.innerText;
hidnl.value=span.innerText;
}
{
var lbnl=document.getElementById("lbNLBirthDay");
var hidnl=document.getElementById("hidNLBirthDay");
var span=document.getElementById('nl');
lbnl.innerText=span.innerText;
hidnl.value=span.innerText;
}
<
td
align
="right"
>
生日: </ td >
< td align ="left" >< input name ="txtDate" id ="txtDate" runat ="server" type ="text" style ="border:1px solid #cccccc;" value ="1900-1-1" onfocus ="this.select()" onclick ="reMethod=setCNDate;fPopCalendar(event,this,this);" size ="12" />
< input id ="ckbIsNL" type ="checkbox" runat ="server" onclick ="javascript:IsUseNLBirthdat(this);" /> 使用农历生日 < asp:Label
ID ="lbNLBirthDay" runat ="server" Text ="Label" ></ asp:Label >
< asp:HiddenField ID ="hidNLBirthDay" runat ="server" />
</ td >
生日: </ td >
< td align ="left" >< input name ="txtDate" id ="txtDate" runat ="server" type ="text" style ="border:1px solid #cccccc;" value ="1900-1-1" onfocus ="this.select()" onclick ="reMethod=setCNDate;fPopCalendar(event,this,this);" size ="12" />
< input id ="ckbIsNL" type ="checkbox" runat ="server" onclick ="javascript:IsUseNLBirthdat(this);" /> 使用农历生日 < asp:Label
ID ="lbNLBirthDay" runat ="server" Text ="Label" ></ asp:Label >
< asp:HiddenField ID ="hidNLBirthDay" runat ="server" />
</ td >