国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

使用用戶自定義類型 CLR UDT

2024-07-21 02:46:46
字體:
來源:轉載
供稿:網友
使用用戶自定義類型 CLR UDT

? ? ??

一些復合類型進行范式分解是沒有必要的,尤其是一些統一模型的情況下

? ? ?

  1. SET NOCOUNT ON
  2. DECLARE @i TimeBalance
  3. SET @i = CAST('D/2015-1-1/7' AS TimeBalance)
  4. SELECT @i
  5. SELECT @i.ToString()
  6. SELECT @i.ToTimeString()
  7. SELECT @i.Distance() AS Distance;
  8. ?
  9. WITH a AS ( SELECT '100' s ,
  10. ????????????????????????'' m
  11. ???????????????UNIONALL
  12. ???????????????SELECT '281474976710693' s ,
  13. ????????????????????????'37次' m
  14. ???????????????UNIONALL
  15. ???????????????SELECT 'Y/2015-1-5/1' s ,
  16. ????????????????????????'包年' m
  17. ???????????????UNIONALL
  18. ???????????????SELECT 'M/2015-1-5/11' s ,
  19. ????????????????????????'包個月' m
  20. ???????????????UNIONALL
  21. ???????????????SELECT 'D/2015-1-1/7' s ,
  22. ????????????????????????'包天' m
  23. ???????????????UNIONALL
  24. ???????????????SELECT '1500438729850887' s ,
  25. ????????????????????????'包天' m
  26. ???????????????UNIONALL
  27. ???????????????SELECT 'H/2015-1-5 8:30/10' s ,
  28. ????????????????????????'包小時' m
  29. ?????????????)
  30. ????SELECT m + '' + s ,
  31. ????????????t.ToString() string ,
  32. ????????????t.ToHex() hex ,
  33. ????????????t.ToTimeString() timeString ,
  34. ????????????t.ToValue() value ,
  35. ????????????t.Distance() distance
  36. ????FROM ( SELECT s ,
  37. ????????????????????????m ,
  38. ????????????????????????CAST (s AS TimeBalance) t
  39. ??????????????FROM A
  40. ????????????) tt

?

??

? ? ??

? ? ??

? ??

相關資料:

? ??

TSql vs. SQL CLR Performance Analysis

? ??

CLR 集成的性能

操作 UDT 數據

? ??

  1. ? ? ?using System;
  2. using System.Data;
  3. using System.Data.SqlClient;
  4. using System.Data.SqlTypes;
  5. using Microsoft.SqlServer.Server;
  6. ?
  7. /// <summary>
  8. /// 時間錢包余額類型
  9. ///
  10. /// </summary>
  11. /// <remarks>
  12. /// 基于長整型,結構如下:
  13. /// 包時類型2B,起始時間UTC秒數4B,時間總長2B(單位同類型決定)
  14. /// <p>包時類型:0不包時1秒2分3時4日5月6年</p>
  15. /// </remarks>
  16. /// <see cref="https://msdn.microsoft.com/en-us/library/ms131086.aspx"/>
  17. [Serializable]
  18. [Microsoft.SqlServer.Server.SqlUserDefinedType(Format.Native)]
  19. publicstruct TimeBalance : INullable
  20. {
  21. ????publicoverridestring ToString()
  22. ????{
  23. ????????switch (type)
  24. ????????{
  25. ????????????case 0:
  26. ????????????case 1:
  27. ????????????????return ToValue().ToString();
  28. ????????????default:
  29. ????????????????returnstring.Format("{0}/{1}/{2}", (TimeEnum)type, UTCSecondToDateTime(startSecond).ToString("yyyy-MM-dd HH:mm:ss"), value);
  30. ????????}
  31. ?
  32. ?
  33. ????}
  34. ????publicstring ToHex()
  35. ????{
  36. ????????return type.ToString("X4") +"" + startSecond.ToString("X8") + value.ToString("X4");
  37. ????}
  38. ????publicstring ToTimeString()
  39. ????{
  40. ?
  41. ????????switch (type)
  42. ????????{
  43. ????????????case 0:
  44. ????????????case 1:
  45. ????????????????return ToValue().ToString();
  46. ????????????default:
  47. ????????????????TimeEnum typeEnum = (TimeEnum)type;
  48. ????????????????string format = "";
  49. ????????????????switch (typeEnum)
  50. ????????????????{
  51. ????????????????????case TimeEnum.S:
  52. ????????????????????default:
  53. ????????????????????????format = "HH:mm:ss";
  54. ????????????????????????break;
  55. ????????????????????case TimeEnum.Mi:
  56. ????????????????????????format = "dd HH:mm";
  57. ????????????????????????break;
  58. ????????????????????case TimeEnum.H:
  59. ????????????????????????format = "MM-dd HH";
  60. ????????????????????????break;
  61. ????????????????????case TimeEnum.D:
  62. ????????????????????????format = "yyyy-MM-dd";
  63. ????????????????????????break;
  64. ????????????????????case TimeEnum.M:
  65. ????????????????????????format = "yyyy-MM";
  66. ????????????????????????break;
  67. ????????????????????case TimeEnum.Y:
  68. ????????????????????????format = "yyyy";
  69. ????????????????????????break;
  70. ?
  71. ?
  72. ????????????????}
  73. ????????????????returnstring.Format("{0}/{1}/{2}", (TimeEnum)type, UTCSecondToDateTime(startSecond).ToString(format), EndTime().ToString(format));
  74. ?
  75. ????????}
  76. ????}
  77. ?
  78. ????publiclong ToValue()
  79. ????{
  80. ????????switch (type)
  81. ????????{
  82. ????????????case 0:
  83. ????????????case 1:
  84. ????????????????returnvalue;
  85. ?
  86. ????????????default:
  87. ????????????????return ((long)type << 48) + ((long)startSecond << 16) + value;
  88. ????????}
  89. ????}
  90. ?
  91. ????publicstatic TimeBalance Parse(SqlString s)
  92. ????{
  93. ????????if (s.IsNull)
  94. ????????????return Null;
  95. ????????try
  96. ????????{
  97. ????????????TimeBalance u = new TimeBalance();
  98. ?
  99. ????????????if (s.Value.Contains("/"))
  100. ????????????{
  101. ????????????????u.type = (short)(TimeEnum)Enum.Parse(typeof(TimeEnum), (s.Value.Split('/')[0]));
  102. ????????????????u.startSecond = DateTimeToUTCSecond(DateTime.Parse(s.Value.Split('/')[1]));
  103. ????????????????u.value = long.Parse(s.Value.Split('/')[2]);
  104. ????????????}
  105. ????????????else
  106. ????????????{
  107. ?
  108. ????????????????byte[] bs = BitConverter.GetBytes(long.Parse(s.Value));
  109. ????????????????u.type = BitConverter.ToInt16(bs, 6);
  110. ????????????????switch (u.type)
  111. ????????????????{
  112. ????????????????????case 0:
  113. ????????????????????????u.value = long.Parse(s.Value);
  114. ????????????????????????break;
  115. ????????????????????case 1:
  116. ????????????????????????u.value = BitConverter.ToInt16(bs, 0);
  117. ????????????????????????break;
  118. ????????????????????default:
  119. ?
  120. ????????????????????????u.startSecond = BitConverter.ToInt32(bs, 2);
  121. ????????????????????????u.value = BitConverter.ToInt16(bs, 0);
  122. ????????????????????????break;
  123. ????????????????}
  124. ????????????}
  125. ?
  126. ????????????return u;
  127. ????????}
  128. ????????catch (Exception ex)
  129. ????????{
  130. ????????????thrownew Exception(s.Value + "/r/n" + ex.ToString());
  131. ????????}
  132. ????}
  133. ?
  134. ?
  135. ?
  136. ?
  137. ????publicbool IsNull
  138. ????{
  139. ????????get
  140. ????????{
  141. ????????????// 在此處放置代碼
  142. ????????????return _null;
  143. ????????}
  144. ????}
  145. ?
  146. ????publicstatic TimeBalance Null
  147. ????{
  148. ????????get
  149. ????????{
  150. ????????????TimeBalance h = new TimeBalance();
  151. ????????????h._null = true;
  152. ????????????return h;
  153. ????????}
  154. ????}
  155. ?
  156. ?
  157. ????publiclong Distance()
  158. ????{
  159. ????????returnvalue;
  160. ?
  161. ????}
  162. ?
  163. ????public DateTime EndTime()
  164. ????{
  165. ????????short v = (short)(value & 0xffff);
  166. ????????TimeEnum typeEnum = (TimeEnum)type;
  167. ????????switch (typeEnum)
  168. ????????{
  169. ????????????// case TimeEnum.N:
  170. ?
  171. ????????????case TimeEnum.S:
  172. ????????????default:
  173. ????????????????return UTCSecondToDateTime(startSecond).AddSeconds(v);
  174. ????????????case TimeEnum.Mi:
  175. ????????????????return UTCSecondToDateTime(startSecond).AddMinutes(v);
  176. ????????????case TimeEnum.H:
  177. ????????????????return UTCSecondToDateTime(startSecond).AddHours(v);
  178. ????????????case TimeEnum.D:
  179. ????????????????return UTCSecondToDateTime(startSecond).AddDays(v);
  180. ????????????case TimeEnum.M:
  181. ????????????????return UTCSecondToDateTime(startSecond).AddMonths(v);
  182. ??????
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 屏东县| 鞍山市| 丹凤县| 上杭县| 札达县| 碌曲县| 济南市| 明光市| 哈密市| 常熟市| 丹棱县| 铅山县| 红桥区| 藁城市| 武山县| 喜德县| 乐安县| 西吉县| 册亨县| 滨海县| 潞西市| 邯郸县| 汤阴县| 汉阴县| 依兰县| 云浮市| 诸暨市| 镇江市| 利辛县| 内乡县| 绥阳县| 北海市| 安西县| 平山县| 教育| 嵊泗县| 海口市| 菏泽市| 九台市| 广饶县| 中江县|