Interbase/Firebird Date&Time Function For UDF

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
type
  TIBDate = Integer;
  TIBTime = Longword;
  TIBTimeStamp = packed record
    Date: TIBDate;
    Time: TIBTime;
  end;

procedure IBDecodeDate(IBDate: TIBDate; var Year, Month, Day: SmallInt);
var
  Century, Y, M, D: integer;
begin
  IBDate := IBDate - (1721119 - 2400001);
  Century := (4 * IBDate - 1) div 146097;
  IBDate := 4 * IBDate - 1 - 146097 * Century;
  D := IBDate div 4;
  IBDate := (4 * D + 3) div 1461;
  D := 4 * D + 3 - 1461 * IBDate;
  D := (D + 4) div 4;
  M := (5 * D - 3) div 153;
  D := 5 * D - 3 - 153 * M;
  D := (D + 5) div 5;
  Y := 100 * Century + IBDate;
  if M < 10 then
    M := M + 3
  else begin
    M := M - 9;
    Y := Y + 1;
  end;
  Year := Y;
  Month := M;
  Day := D;
end;

function IBEncodeDate(Year, Month, Day: SmallInt): TIBDate;
var
  Century, ShortYear: integer;
begin
  if Month > 2 then
    Month := Month - 3
  else begin
    Month := Month + 9;
    Year := Year - 1;
  end;
  Century := Year div 100;
  ShortYear := Year - 100 * Century;
  Result :=
    (146097 * Century) div 4 +
    (1461 * ShortYear) div 4 +
    (153 * Month + 2) div 5 + Day + 1721119 - 2400001;
end;

procedure IBDecodeTime(IBTime: TIBTime; var Hour, Min, Sec, Msec: word);
const
  ISC_TIME_SECONDS_PRECISION = 10000;
  SECONDS_PER_MINUTE = 60;
  SECONDS_PER_HOUR = 3600;
//  SECONDS_PER_DAY = 86400;
var
  TotalSeconds: Longword;
begin
  TotalSeconds := IBTime div ISC_TIME_SECONDS_PRECISION;
  Msec := IBTime mod ISC_TIME_SECONDS_PRECISION;
  Hour := TotalSeconds div SECONDS_PER_HOUR;
  Min := (TotalSeconds div SECONDS_PER_MINUTE) mod SECONDS_PER_MINUTE;
  Sec := TotalSeconds mod SECONDS_PER_MINUTE;
end;

function IBEncodeTime(Hour, Min, Sec, Msec: word): TIBTime;
const
  ISC_TIME_SECONDS_PRECISION = 10000;
  SECONDS_PER_MINUTE = 60;
  SECONDS_PER_HOUR = 3600;
//  SECONDS_PER_DAY = 86400;
begin
  Result := (Hour * SECONDS_PER_HOUR + Min * SECONDS_PER_MINUTE + Sec)
    * ISC_TIME_SECONDS_PRECISION + Msec;
end;
UDF函数开发流程 1。首先编写UDF 继承: org.apache.hadoop.hive.ql.exec.UDF; 需要导入hive-exec-0.13.1-cdh5.3.6.jar 包及hadoop-common-2.5.0-cdh5.3.6.jar eg:package com.paic.nets.pnc.udf; import java.text.SimpleDateFormat;... 阅读详情

相关推荐

2026年最新郴州市公交线路矢量数据.zip

数据格式:shp 数据坐标:GCJ02 数据更新时间:2026年9月 公交线路来源:8684网站 https://8684.com.cn/ 站点数据来源:高德API接口 数据打开方式:QGIS或Arcgis 站点数据字段:名称、序号、对应线路、几何信息 线路数据字段:名称、类型、起点、终点、开始时间、结束时间、起步价、全价、长度、公司、几何信息

Firebird将当前时间格式化为年-月-日

【sql语句】Firebird时间转换为:年-月-日

雪碧姐姐 464

安卓开发adt 64位22.x版本 .zip

适用于大学生课程开发安卓,eclipse-adt 集成版,adt-bundle-windows-x86_64-20140321 内置android 4.4

FB日期时间操作

FB日期时间操作 查询2007年度以后的,12月份以上的数据记录,datetime为timestamp字段 select * from tableblob where extract(month from datetime)=12 and extract(year from datetime)>2007 查询不重复的(年份+月份)组合,datetime为...

737

[UDF系列]如何编写InterBase UDF

译者叙: 由于InterBase性能方面表现突出,并且它是开源和跨平台的,有很多使用Delphi,C++Builder的程序员开始采用它做为其后数据库平台。但是InterBase的中文资料简直太少了。昨日,一网友在CSDN上提到InterBaseUDF(user defined functions 用户自定义函数),我顺手一查,网上竟然查不到这方面的中文资料。于是,我今天将一篇如何编写和使用I

SeekMyself的专栏 2254

[UDF系列]如何编写InterBase UDF 之二

(接上一篇)如何编写InterBase UDFwarton译怎么编写字符串和日期型处理函数UDF呢? 下面编写一个“Left“函数    内存分配问题:              如果你使用IB(InterBase)5.1以下版本的话,在你的单元文件中键入下面的声明:function malloc(Bytes: Integer): Pointer; cdecl;

知而后定 1408

[UDF系列]如何编写InterBase UDF 之一

如何编写InterBase UDF(作者:Gregory Deatz - Hoagland, Longo, Moran, Dunst & Doukas)warton 译 译者叙:由于InterBase性能方面表现突出,并且它是开源和跨平台的,有很多使用Delphi,C++Builder的程序员开始采用它做为其后数据库平台。但是InterBase的中文资料简直太少了。昨日,一网友

知而后定 1507

[UDF系列]如何编写InterBase UDF 之三

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 435

[UDF系列]如何创建InterBase UDF

[UDF系列之五]:如何创建InterBase UDFby Paul McGee (c) Borland Internation Inc.Warton译[概述]:用户定义函数(UDF)是一种采用编译语言编写的函数,是用户为执行自定义的功能和常用的任务面设计的。UDF 允许程序员模块化一个数据库应用程序,并能嵌入到数据库以增强数据库自身的功能。UDF 也总是在数据库服务器

知而后定 1700

firebird的日期型字段

fb一大特色,日期型字段。dialect3时,对date time datetime是分的很清楚的。它们之间,你必须手把格式设定好,否则会报错。而不是你想象的会自动化:表xxx的date字段yyy,insert xxx(yyy) values('2016-05-25 00 :00:00')注定失败。就是说要求比较严格了。否则就会扯皮。 dialect 1下日期的使用:where ca...

weixin_30257433的博客 406

ESim电工仿真零基础入门:灯双控电路家庭配电原理与仿真接线PPT课件(单控双控三控灯教学)

内容概要:以家里最常见的"楼梯灯"为切入点,讲透家庭配电中火线(L)、零线(N)、地线(PE)的作用,推导单控、双控、三控灯的控制逻辑——从"串联不行、并联不行"到用"单刀双掷开关+两条联络线"实现双控,并给出"同向则通、异向则断"的实用口诀。全篇配合ESim电工仿真逐步演示接线与现象。 适合人群:零基础电工初学者、职业院校学生、想搞懂家庭照明电路的动手爱好者、电工考证备考人员。 使用场景及目标:可用于电工入门第一课教学、家庭电路科普、照明双控知识自学;目标是学会读懂家庭配电、独立完成单/双控灯接线并在仿真中验证。 其他说明:共16页,建议40分钟,难度零基础;配合ESim电工仿真软件动手实操效果更佳。

上一篇: Firebird command Tools line switches
下一篇: how detect Interbase/FireBird Running
viocal
博客等级 码龄23年 2粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值