[英]Convert PL-SQL To SQL Server
我需要一个sql函数,该函数需要一个有效的SQL Server日期,并返回该日期的月相。 我找到了一个函数,但是不幸的是它在pl-sql
是我不了解的,我可以按原样转换代码,但是我不知道如何在SQL Server中获取儒略日期。
这是我要使用的骨架功能
IF OBJECT_ID (N'dbo.fn_phaseOfMoon', N'FN') IS NOT NULL
DROP FUNCTION dbo.fn_phaseOfMoon;
GO
CREATE FUNCTION dbo.fn_phaseOfMoon (@DATE datetime)
RETURNS VARCHAR(30) AS
BEGIN
RETURN 'NA';
END
GO
pl-sql代码位于此处 ,有人可以向我指出正确的方向,还是可以帮助您转换代码?
这是我更改为MSSQL的Java代码。 看看是否能帮到您。
CREATE FUNCTION dbo.fn_phaseOfMoon (@Date datetime)
RETURNS INT
BEGIN
Declare @y int,
@m int,
@d int,
@c int,
@e int,
@b int,
@jd float
Select @y = DatePart(yy, @Date), @m = DatePart(mm, @Date), @d = DatePart(dd, @Date)
/*
calculates the moon phase (0-7), accurate to 1 segment.
0 = > new moon.
4 => full moon.
*/
if (@m < 3)
Select @y = @y - 1, @m = @m + 12
Select @m = @m + 1;
Select @c = 365.25 * @y, @e = 30.6 * @m
Select @jd = @c+@e+@d-694039.09 /* jd is total days elapsed */
Select @jd = @jd / 29.53 /* divide by the moon cycle (29.53 days) */
Select @b = convert(int, @jd) /* int(jd) -> b, take integer part of jd */
Select @jd = @jd - @b /* subtract integer part to leave fractional part of original jd */
Select @b = (@jd * 8) + 0.5 /* scale fraction from 0-8 and round by adding 0.5 */
if @b = 8
Select @b = 0 /* 0 and 8 are the same so turn 8 into 0 */
return @b
END
我对这些东西不太了解,所以您必须检查答案是否正确
Java代码的来源: http : //www.voidware.com/moon_phase.htm
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.