int8.out 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934
  1. --
  2. -- INT8
  3. -- Test int8 64-bit integers.
  4. --
  5. CREATE TABLE INT8_TBL(q1 int8, q2 int8);
  6. INSERT INTO INT8_TBL VALUES(' 123 ',' 456');
  7. INSERT INTO INT8_TBL VALUES('123 ','4567890123456789');
  8. INSERT INTO INT8_TBL VALUES('4567890123456789','123');
  9. INSERT INTO INT8_TBL VALUES(+4567890123456789,'4567890123456789');
  10. INSERT INTO INT8_TBL VALUES('+4567890123456789','-4567890123456789');
  11. -- bad inputs
  12. INSERT INTO INT8_TBL(q1) VALUES (' ');
  13. ERROR: invalid input syntax for type bigint: " "
  14. LINE 1: INSERT INTO INT8_TBL(q1) VALUES (' ');
  15. ^
  16. INSERT INTO INT8_TBL(q1) VALUES ('xxx');
  17. ERROR: invalid input syntax for type bigint: "xxx"
  18. LINE 1: INSERT INTO INT8_TBL(q1) VALUES ('xxx');
  19. ^
  20. INSERT INTO INT8_TBL(q1) VALUES ('3908203590239580293850293850329485');
  21. ERROR: value "3908203590239580293850293850329485" is out of range for type bigint
  22. LINE 1: INSERT INTO INT8_TBL(q1) VALUES ('39082035902395802938502938...
  23. ^
  24. INSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340329840934');
  25. ERROR: value "-1204982019841029840928340329840934" is out of range for type bigint
  26. LINE 1: INSERT INTO INT8_TBL(q1) VALUES ('-1204982019841029840928340...
  27. ^
  28. INSERT INTO INT8_TBL(q1) VALUES ('- 123');
  29. ERROR: invalid input syntax for type bigint: "- 123"
  30. LINE 1: INSERT INTO INT8_TBL(q1) VALUES ('- 123');
  31. ^
  32. INSERT INTO INT8_TBL(q1) VALUES (' 345 5');
  33. ERROR: invalid input syntax for type bigint: " 345 5"
  34. LINE 1: INSERT INTO INT8_TBL(q1) VALUES (' 345 5');
  35. ^
  36. INSERT INTO INT8_TBL(q1) VALUES ('');
  37. ERROR: invalid input syntax for type bigint: ""
  38. LINE 1: INSERT INTO INT8_TBL(q1) VALUES ('');
  39. ^
  40. SELECT * FROM INT8_TBL;
  41. q1 | q2
  42. ------------------+-------------------
  43. 123 | 456
  44. 123 | 4567890123456789
  45. 4567890123456789 | 123
  46. 4567890123456789 | 4567890123456789
  47. 4567890123456789 | -4567890123456789
  48. (5 rows)
  49. -- int8/int8 cmp
  50. SELECT * FROM INT8_TBL WHERE q2 = 4567890123456789;
  51. q1 | q2
  52. ------------------+------------------
  53. 123 | 4567890123456789
  54. 4567890123456789 | 4567890123456789
  55. (2 rows)
  56. SELECT * FROM INT8_TBL WHERE q2 <> 4567890123456789;
  57. q1 | q2
  58. ------------------+-------------------
  59. 123 | 456
  60. 4567890123456789 | 123
  61. 4567890123456789 | -4567890123456789
  62. (3 rows)
  63. SELECT * FROM INT8_TBL WHERE q2 < 4567890123456789;
  64. q1 | q2
  65. ------------------+-------------------
  66. 123 | 456
  67. 4567890123456789 | 123
  68. 4567890123456789 | -4567890123456789
  69. (3 rows)
  70. SELECT * FROM INT8_TBL WHERE q2 > 4567890123456789;
  71. q1 | q2
  72. ----+----
  73. (0 rows)
  74. SELECT * FROM INT8_TBL WHERE q2 <= 4567890123456789;
  75. q1 | q2
  76. ------------------+-------------------
  77. 123 | 456
  78. 123 | 4567890123456789
  79. 4567890123456789 | 123
  80. 4567890123456789 | 4567890123456789
  81. 4567890123456789 | -4567890123456789
  82. (5 rows)
  83. SELECT * FROM INT8_TBL WHERE q2 >= 4567890123456789;
  84. q1 | q2
  85. ------------------+------------------
  86. 123 | 4567890123456789
  87. 4567890123456789 | 4567890123456789
  88. (2 rows)
  89. -- int8/int4 cmp
  90. SELECT * FROM INT8_TBL WHERE q2 = 456;
  91. q1 | q2
  92. -----+-----
  93. 123 | 456
  94. (1 row)
  95. SELECT * FROM INT8_TBL WHERE q2 <> 456;
  96. q1 | q2
  97. ------------------+-------------------
  98. 123 | 4567890123456789
  99. 4567890123456789 | 123
  100. 4567890123456789 | 4567890123456789
  101. 4567890123456789 | -4567890123456789
  102. (4 rows)
  103. SELECT * FROM INT8_TBL WHERE q2 < 456;
  104. q1 | q2
  105. ------------------+-------------------
  106. 4567890123456789 | 123
  107. 4567890123456789 | -4567890123456789
  108. (2 rows)
  109. SELECT * FROM INT8_TBL WHERE q2 > 456;
  110. q1 | q2
  111. ------------------+------------------
  112. 123 | 4567890123456789
  113. 4567890123456789 | 4567890123456789
  114. (2 rows)
  115. SELECT * FROM INT8_TBL WHERE q2 <= 456;
  116. q1 | q2
  117. ------------------+-------------------
  118. 123 | 456
  119. 4567890123456789 | 123
  120. 4567890123456789 | -4567890123456789
  121. (3 rows)
  122. SELECT * FROM INT8_TBL WHERE q2 >= 456;
  123. q1 | q2
  124. ------------------+------------------
  125. 123 | 456
  126. 123 | 4567890123456789
  127. 4567890123456789 | 4567890123456789
  128. (3 rows)
  129. -- int4/int8 cmp
  130. SELECT * FROM INT8_TBL WHERE 123 = q1;
  131. q1 | q2
  132. -----+------------------
  133. 123 | 456
  134. 123 | 4567890123456789
  135. (2 rows)
  136. SELECT * FROM INT8_TBL WHERE 123 <> q1;
  137. q1 | q2
  138. ------------------+-------------------
  139. 4567890123456789 | 123
  140. 4567890123456789 | 4567890123456789
  141. 4567890123456789 | -4567890123456789
  142. (3 rows)
  143. SELECT * FROM INT8_TBL WHERE 123 < q1;
  144. q1 | q2
  145. ------------------+-------------------
  146. 4567890123456789 | 123
  147. 4567890123456789 | 4567890123456789
  148. 4567890123456789 | -4567890123456789
  149. (3 rows)
  150. SELECT * FROM INT8_TBL WHERE 123 > q1;
  151. q1 | q2
  152. ----+----
  153. (0 rows)
  154. SELECT * FROM INT8_TBL WHERE 123 <= q1;
  155. q1 | q2
  156. ------------------+-------------------
  157. 123 | 456
  158. 123 | 4567890123456789
  159. 4567890123456789 | 123
  160. 4567890123456789 | 4567890123456789
  161. 4567890123456789 | -4567890123456789
  162. (5 rows)
  163. SELECT * FROM INT8_TBL WHERE 123 >= q1;
  164. q1 | q2
  165. -----+------------------
  166. 123 | 456
  167. 123 | 4567890123456789
  168. (2 rows)
  169. -- int8/int2 cmp
  170. SELECT * FROM INT8_TBL WHERE q2 = '456'::int2;
  171. q1 | q2
  172. -----+-----
  173. 123 | 456
  174. (1 row)
  175. SELECT * FROM INT8_TBL WHERE q2 <> '456'::int2;
  176. q1 | q2
  177. ------------------+-------------------
  178. 123 | 4567890123456789
  179. 4567890123456789 | 123
  180. 4567890123456789 | 4567890123456789
  181. 4567890123456789 | -4567890123456789
  182. (4 rows)
  183. SELECT * FROM INT8_TBL WHERE q2 < '456'::int2;
  184. q1 | q2
  185. ------------------+-------------------
  186. 4567890123456789 | 123
  187. 4567890123456789 | -4567890123456789
  188. (2 rows)
  189. SELECT * FROM INT8_TBL WHERE q2 > '456'::int2;
  190. q1 | q2
  191. ------------------+------------------
  192. 123 | 4567890123456789
  193. 4567890123456789 | 4567890123456789
  194. (2 rows)
  195. SELECT * FROM INT8_TBL WHERE q2 <= '456'::int2;
  196. q1 | q2
  197. ------------------+-------------------
  198. 123 | 456
  199. 4567890123456789 | 123
  200. 4567890123456789 | -4567890123456789
  201. (3 rows)
  202. SELECT * FROM INT8_TBL WHERE q2 >= '456'::int2;
  203. q1 | q2
  204. ------------------+------------------
  205. 123 | 456
  206. 123 | 4567890123456789
  207. 4567890123456789 | 4567890123456789
  208. (3 rows)
  209. -- int2/int8 cmp
  210. SELECT * FROM INT8_TBL WHERE '123'::int2 = q1;
  211. q1 | q2
  212. -----+------------------
  213. 123 | 456
  214. 123 | 4567890123456789
  215. (2 rows)
  216. SELECT * FROM INT8_TBL WHERE '123'::int2 <> q1;
  217. q1 | q2
  218. ------------------+-------------------
  219. 4567890123456789 | 123
  220. 4567890123456789 | 4567890123456789
  221. 4567890123456789 | -4567890123456789
  222. (3 rows)
  223. SELECT * FROM INT8_TBL WHERE '123'::int2 < q1;
  224. q1 | q2
  225. ------------------+-------------------
  226. 4567890123456789 | 123
  227. 4567890123456789 | 4567890123456789
  228. 4567890123456789 | -4567890123456789
  229. (3 rows)
  230. SELECT * FROM INT8_TBL WHERE '123'::int2 > q1;
  231. q1 | q2
  232. ----+----
  233. (0 rows)
  234. SELECT * FROM INT8_TBL WHERE '123'::int2 <= q1;
  235. q1 | q2
  236. ------------------+-------------------
  237. 123 | 456
  238. 123 | 4567890123456789
  239. 4567890123456789 | 123
  240. 4567890123456789 | 4567890123456789
  241. 4567890123456789 | -4567890123456789
  242. (5 rows)
  243. SELECT * FROM INT8_TBL WHERE '123'::int2 >= q1;
  244. q1 | q2
  245. -----+------------------
  246. 123 | 456
  247. 123 | 4567890123456789
  248. (2 rows)
  249. SELECT q1 AS plus, -q1 AS minus FROM INT8_TBL;
  250. plus | minus
  251. ------------------+-------------------
  252. 123 | -123
  253. 123 | -123
  254. 4567890123456789 | -4567890123456789
  255. 4567890123456789 | -4567890123456789
  256. 4567890123456789 | -4567890123456789
  257. (5 rows)
  258. SELECT q1, q2, q1 + q2 AS plus FROM INT8_TBL;
  259. q1 | q2 | plus
  260. ------------------+-------------------+------------------
  261. 123 | 456 | 579
  262. 123 | 4567890123456789 | 4567890123456912
  263. 4567890123456789 | 123 | 4567890123456912
  264. 4567890123456789 | 4567890123456789 | 9135780246913578
  265. 4567890123456789 | -4567890123456789 | 0
  266. (5 rows)
  267. SELECT q1, q2, q1 - q2 AS minus FROM INT8_TBL;
  268. q1 | q2 | minus
  269. ------------------+-------------------+-------------------
  270. 123 | 456 | -333
  271. 123 | 4567890123456789 | -4567890123456666
  272. 4567890123456789 | 123 | 4567890123456666
  273. 4567890123456789 | 4567890123456789 | 0
  274. 4567890123456789 | -4567890123456789 | 9135780246913578
  275. (5 rows)
  276. SELECT q1, q2, q1 * q2 AS multiply FROM INT8_TBL;
  277. ERROR: bigint out of range
  278. SELECT q1, q2, q1 * q2 AS multiply FROM INT8_TBL
  279. WHERE q1 < 1000 or (q2 > 0 and q2 < 1000);
  280. q1 | q2 | multiply
  281. ------------------+------------------+--------------------
  282. 123 | 456 | 56088
  283. 123 | 4567890123456789 | 561850485185185047
  284. 4567890123456789 | 123 | 561850485185185047
  285. (3 rows)
  286. SELECT q1, q2, q1 / q2 AS divide, q1 % q2 AS mod FROM INT8_TBL;
  287. q1 | q2 | divide | mod
  288. ------------------+-------------------+----------------+-----
  289. 123 | 456 | 0 | 123
  290. 123 | 4567890123456789 | 0 | 123
  291. 4567890123456789 | 123 | 37137318076884 | 57
  292. 4567890123456789 | 4567890123456789 | 1 | 0
  293. 4567890123456789 | -4567890123456789 | -1 | 0
  294. (5 rows)
  295. SELECT q1, float8(q1) FROM INT8_TBL;
  296. q1 | float8
  297. ------------------+-----------------------
  298. 123 | 123
  299. 123 | 123
  300. 4567890123456789 | 4.567890123456789e+15
  301. 4567890123456789 | 4.567890123456789e+15
  302. 4567890123456789 | 4.567890123456789e+15
  303. (5 rows)
  304. SELECT q2, float8(q2) FROM INT8_TBL;
  305. q2 | float8
  306. -------------------+------------------------
  307. 456 | 456
  308. 4567890123456789 | 4.567890123456789e+15
  309. 123 | 123
  310. 4567890123456789 | 4.567890123456789e+15
  311. -4567890123456789 | -4.567890123456789e+15
  312. (5 rows)
  313. SELECT 37 + q1 AS plus4 FROM INT8_TBL;
  314. plus4
  315. ------------------
  316. 160
  317. 160
  318. 4567890123456826
  319. 4567890123456826
  320. 4567890123456826
  321. (5 rows)
  322. SELECT 37 - q1 AS minus4 FROM INT8_TBL;
  323. minus4
  324. -------------------
  325. -86
  326. -86
  327. -4567890123456752
  328. -4567890123456752
  329. -4567890123456752
  330. (5 rows)
  331. SELECT 2 * q1 AS "twice int4" FROM INT8_TBL;
  332. twice int4
  333. ------------------
  334. 246
  335. 246
  336. 9135780246913578
  337. 9135780246913578
  338. 9135780246913578
  339. (5 rows)
  340. SELECT q1 * 2 AS "twice int4" FROM INT8_TBL;
  341. twice int4
  342. ------------------
  343. 246
  344. 246
  345. 9135780246913578
  346. 9135780246913578
  347. 9135780246913578
  348. (5 rows)
  349. -- int8 op int4
  350. SELECT q1 + 42::int4 AS "8plus4", q1 - 42::int4 AS "8minus4", q1 * 42::int4 AS "8mul4", q1 / 42::int4 AS "8div4" FROM INT8_TBL;
  351. 8plus4 | 8minus4 | 8mul4 | 8div4
  352. ------------------+------------------+--------------------+-----------------
  353. 165 | 81 | 5166 | 2
  354. 165 | 81 | 5166 | 2
  355. 4567890123456831 | 4567890123456747 | 191851385185185138 | 108759288653733
  356. 4567890123456831 | 4567890123456747 | 191851385185185138 | 108759288653733
  357. 4567890123456831 | 4567890123456747 | 191851385185185138 | 108759288653733
  358. (5 rows)
  359. -- int4 op int8
  360. SELECT 246::int4 + q1 AS "4plus8", 246::int4 - q1 AS "4minus8", 246::int4 * q1 AS "4mul8", 246::int4 / q1 AS "4div8" FROM INT8_TBL;
  361. 4plus8 | 4minus8 | 4mul8 | 4div8
  362. ------------------+-------------------+---------------------+-------
  363. 369 | 123 | 30258 | 2
  364. 369 | 123 | 30258 | 2
  365. 4567890123457035 | -4567890123456543 | 1123700970370370094 | 0
  366. 4567890123457035 | -4567890123456543 | 1123700970370370094 | 0
  367. 4567890123457035 | -4567890123456543 | 1123700970370370094 | 0
  368. (5 rows)
  369. -- int8 op int2
  370. SELECT q1 + 42::int2 AS "8plus2", q1 - 42::int2 AS "8minus2", q1 * 42::int2 AS "8mul2", q1 / 42::int2 AS "8div2" FROM INT8_TBL;
  371. 8plus2 | 8minus2 | 8mul2 | 8div2
  372. ------------------+------------------+--------------------+-----------------
  373. 165 | 81 | 5166 | 2
  374. 165 | 81 | 5166 | 2
  375. 4567890123456831 | 4567890123456747 | 191851385185185138 | 108759288653733
  376. 4567890123456831 | 4567890123456747 | 191851385185185138 | 108759288653733
  377. 4567890123456831 | 4567890123456747 | 191851385185185138 | 108759288653733
  378. (5 rows)
  379. -- int2 op int8
  380. SELECT 246::int2 + q1 AS "2plus8", 246::int2 - q1 AS "2minus8", 246::int2 * q1 AS "2mul8", 246::int2 / q1 AS "2div8" FROM INT8_TBL;
  381. 2plus8 | 2minus8 | 2mul8 | 2div8
  382. ------------------+-------------------+---------------------+-------
  383. 369 | 123 | 30258 | 2
  384. 369 | 123 | 30258 | 2
  385. 4567890123457035 | -4567890123456543 | 1123700970370370094 | 0
  386. 4567890123457035 | -4567890123456543 | 1123700970370370094 | 0
  387. 4567890123457035 | -4567890123456543 | 1123700970370370094 | 0
  388. (5 rows)
  389. SELECT q2, abs(q2) FROM INT8_TBL;
  390. q2 | abs
  391. -------------------+------------------
  392. 456 | 456
  393. 4567890123456789 | 4567890123456789
  394. 123 | 123
  395. 4567890123456789 | 4567890123456789
  396. -4567890123456789 | 4567890123456789
  397. (5 rows)
  398. SELECT min(q1), min(q2) FROM INT8_TBL;
  399. min | min
  400. -----+-------------------
  401. 123 | -4567890123456789
  402. (1 row)
  403. SELECT max(q1), max(q2) FROM INT8_TBL;
  404. max | max
  405. ------------------+------------------
  406. 4567890123456789 | 4567890123456789
  407. (1 row)
  408. -- TO_CHAR()
  409. --
  410. SELECT to_char(q1, '9G999G999G999G999G999'), to_char(q2, '9,999,999,999,999,999')
  411. FROM INT8_TBL;
  412. to_char | to_char
  413. ------------------------+------------------------
  414. 123 | 456
  415. 123 | 4,567,890,123,456,789
  416. 4,567,890,123,456,789 | 123
  417. 4,567,890,123,456,789 | 4,567,890,123,456,789
  418. 4,567,890,123,456,789 | -4,567,890,123,456,789
  419. (5 rows)
  420. SELECT to_char(q1, '9G999G999G999G999G999D999G999'), to_char(q2, '9,999,999,999,999,999.999,999')
  421. FROM INT8_TBL;
  422. to_char | to_char
  423. --------------------------------+--------------------------------
  424. 123.000,000 | 456.000,000
  425. 123.000,000 | 4,567,890,123,456,789.000,000
  426. 4,567,890,123,456,789.000,000 | 123.000,000
  427. 4,567,890,123,456,789.000,000 | 4,567,890,123,456,789.000,000
  428. 4,567,890,123,456,789.000,000 | -4,567,890,123,456,789.000,000
  429. (5 rows)
  430. SELECT to_char( (q1 * -1), '9999999999999999PR'), to_char( (q2 * -1), '9999999999999999.999PR')
  431. FROM INT8_TBL;
  432. to_char | to_char
  433. --------------------+------------------------
  434. <123> | <456.000>
  435. <123> | <4567890123456789.000>
  436. <4567890123456789> | <123.000>
  437. <4567890123456789> | <4567890123456789.000>
  438. <4567890123456789> | 4567890123456789.000
  439. (5 rows)
  440. SELECT to_char( (q1 * -1), '9999999999999999S'), to_char( (q2 * -1), 'S9999999999999999')
  441. FROM INT8_TBL;
  442. to_char | to_char
  443. -------------------+-------------------
  444. 123- | -456
  445. 123- | -4567890123456789
  446. 4567890123456789- | -123
  447. 4567890123456789- | -4567890123456789
  448. 4567890123456789- | +4567890123456789
  449. (5 rows)
  450. SELECT to_char(q2, 'MI9999999999999999') FROM INT8_TBL;
  451. to_char
  452. -------------------
  453. 456
  454. 4567890123456789
  455. 123
  456. 4567890123456789
  457. -4567890123456789
  458. (5 rows)
  459. SELECT to_char(q2, 'FMS9999999999999999') FROM INT8_TBL;
  460. to_char
  461. -------------------
  462. +456
  463. +4567890123456789
  464. +123
  465. +4567890123456789
  466. -4567890123456789
  467. (5 rows)
  468. SELECT to_char(q2, 'FM9999999999999999THPR') FROM INT8_TBL;
  469. to_char
  470. --------------------
  471. 456TH
  472. 4567890123456789TH
  473. 123RD
  474. 4567890123456789TH
  475. <4567890123456789>
  476. (5 rows)
  477. SELECT to_char(q2, 'SG9999999999999999th') FROM INT8_TBL;
  478. to_char
  479. ---------------------
  480. + 456th
  481. +4567890123456789th
  482. + 123rd
  483. +4567890123456789th
  484. -4567890123456789
  485. (5 rows)
  486. SELECT to_char(q2, '0999999999999999') FROM INT8_TBL;
  487. to_char
  488. -------------------
  489. 0000000000000456
  490. 4567890123456789
  491. 0000000000000123
  492. 4567890123456789
  493. -4567890123456789
  494. (5 rows)
  495. SELECT to_char(q2, 'S0999999999999999') FROM INT8_TBL;
  496. to_char
  497. -------------------
  498. +0000000000000456
  499. +4567890123456789
  500. +0000000000000123
  501. +4567890123456789
  502. -4567890123456789
  503. (5 rows)
  504. SELECT to_char(q2, 'FM0999999999999999') FROM INT8_TBL;
  505. to_char
  506. -------------------
  507. 0000000000000456
  508. 4567890123456789
  509. 0000000000000123
  510. 4567890123456789
  511. -4567890123456789
  512. (5 rows)
  513. SELECT to_char(q2, 'FM9999999999999999.000') FROM INT8_TBL;
  514. to_char
  515. -----------------------
  516. 456.000
  517. 4567890123456789.000
  518. 123.000
  519. 4567890123456789.000
  520. -4567890123456789.000
  521. (5 rows)
  522. SELECT to_char(q2, 'L9999999999999999.000') FROM INT8_TBL;
  523. to_char
  524. ------------------------
  525. 456.000
  526. 4567890123456789.000
  527. 123.000
  528. 4567890123456789.000
  529. -4567890123456789.000
  530. (5 rows)
  531. SELECT to_char(q2, 'FM9999999999999999.999') FROM INT8_TBL;
  532. to_char
  533. --------------------
  534. 456.
  535. 4567890123456789.
  536. 123.
  537. 4567890123456789.
  538. -4567890123456789.
  539. (5 rows)
  540. SELECT to_char(q2, 'S 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 . 9 9 9') FROM INT8_TBL;
  541. to_char
  542. -------------------------------------------
  543. +4 5 6 . 0 0 0
  544. +4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
  545. +1 2 3 . 0 0 0
  546. +4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
  547. -4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 . 0 0 0
  548. (5 rows)
  549. SELECT to_char(q2, E'99999 "text" 9999 "9999" 999 "\\"text between quote marks\\"" 9999') FROM INT8_TBL;
  550. to_char
  551. -----------------------------------------------------------
  552. text 9999 "text between quote marks" 456
  553. 45678 text 9012 9999 345 "text between quote marks" 6789
  554. text 9999 "text between quote marks" 123
  555. 45678 text 9012 9999 345 "text between quote marks" 6789
  556. -45678 text 9012 9999 345 "text between quote marks" 6789
  557. (5 rows)
  558. SELECT to_char(q2, '999999SG9999999999') FROM INT8_TBL;
  559. to_char
  560. -------------------
  561. + 456
  562. 456789+0123456789
  563. + 123
  564. 456789+0123456789
  565. 456789-0123456789
  566. (5 rows)
  567. -- check min/max values and overflow behavior
  568. select '-9223372036854775808'::int8;
  569. int8
  570. ----------------------
  571. -9223372036854775808
  572. (1 row)
  573. select '-9223372036854775809'::int8;
  574. ERROR: value "-9223372036854775809" is out of range for type bigint
  575. LINE 1: select '-9223372036854775809'::int8;
  576. ^
  577. select '9223372036854775807'::int8;
  578. int8
  579. ---------------------
  580. 9223372036854775807
  581. (1 row)
  582. select '9223372036854775808'::int8;
  583. ERROR: value "9223372036854775808" is out of range for type bigint
  584. LINE 1: select '9223372036854775808'::int8;
  585. ^
  586. select -('-9223372036854775807'::int8);
  587. ?column?
  588. ---------------------
  589. 9223372036854775807
  590. (1 row)
  591. select -('-9223372036854775808'::int8);
  592. ERROR: bigint out of range
  593. select '9223372036854775800'::int8 + '9223372036854775800'::int8;
  594. ERROR: bigint out of range
  595. select '-9223372036854775800'::int8 + '-9223372036854775800'::int8;
  596. ERROR: bigint out of range
  597. select '9223372036854775800'::int8 - '-9223372036854775800'::int8;
  598. ERROR: bigint out of range
  599. select '-9223372036854775800'::int8 - '9223372036854775800'::int8;
  600. ERROR: bigint out of range
  601. select '9223372036854775800'::int8 * '9223372036854775800'::int8;
  602. ERROR: bigint out of range
  603. select '9223372036854775800'::int8 / '0'::int8;
  604. ERROR: division by zero
  605. select '9223372036854775800'::int8 % '0'::int8;
  606. ERROR: division by zero
  607. select abs('-9223372036854775808'::int8);
  608. ERROR: bigint out of range
  609. select '9223372036854775800'::int8 + '100'::int4;
  610. ERROR: bigint out of range
  611. select '-9223372036854775800'::int8 - '100'::int4;
  612. ERROR: bigint out of range
  613. select '9223372036854775800'::int8 * '100'::int4;
  614. ERROR: bigint out of range
  615. select '100'::int4 + '9223372036854775800'::int8;
  616. ERROR: bigint out of range
  617. select '-100'::int4 - '9223372036854775800'::int8;
  618. ERROR: bigint out of range
  619. select '100'::int4 * '9223372036854775800'::int8;
  620. ERROR: bigint out of range
  621. select '9223372036854775800'::int8 + '100'::int2;
  622. ERROR: bigint out of range
  623. select '-9223372036854775800'::int8 - '100'::int2;
  624. ERROR: bigint out of range
  625. select '9223372036854775800'::int8 * '100'::int2;
  626. ERROR: bigint out of range
  627. select '-9223372036854775808'::int8 / '0'::int2;
  628. ERROR: division by zero
  629. select '100'::int2 + '9223372036854775800'::int8;
  630. ERROR: bigint out of range
  631. select '-100'::int2 - '9223372036854775800'::int8;
  632. ERROR: bigint out of range
  633. select '100'::int2 * '9223372036854775800'::int8;
  634. ERROR: bigint out of range
  635. select '100'::int2 / '0'::int8;
  636. ERROR: division by zero
  637. SELECT CAST(q1 AS int4) FROM int8_tbl WHERE q2 = 456;
  638. q1
  639. -----
  640. 123
  641. (1 row)
  642. SELECT CAST(q1 AS int4) FROM int8_tbl WHERE q2 <> 456;
  643. ERROR: integer out of range
  644. SELECT CAST(q1 AS int2) FROM int8_tbl WHERE q2 = 456;
  645. q1
  646. -----
  647. 123
  648. (1 row)
  649. SELECT CAST(q1 AS int2) FROM int8_tbl WHERE q2 <> 456;
  650. ERROR: smallint out of range
  651. SELECT CAST('42'::int2 AS int8), CAST('-37'::int2 AS int8);
  652. int8 | int8
  653. ------+------
  654. 42 | -37
  655. (1 row)
  656. SELECT CAST(q1 AS float4), CAST(q2 AS float8) FROM INT8_TBL;
  657. q1 | q2
  658. -------------+------------------------
  659. 123 | 456
  660. 123 | 4.567890123456789e+15
  661. 4.56789e+15 | 123
  662. 4.56789e+15 | 4.567890123456789e+15
  663. 4.56789e+15 | -4.567890123456789e+15
  664. (5 rows)
  665. SELECT CAST('36854775807.0'::float4 AS int8);
  666. int8
  667. -------------
  668. 36854775808
  669. (1 row)
  670. SELECT CAST('922337203685477580700.0'::float8 AS int8);
  671. ERROR: bigint out of range
  672. SELECT CAST(q1 AS oid) FROM INT8_TBL;
  673. ERROR: OID out of range
  674. SELECT oid::int8 FROM pg_class WHERE relname = 'pg_class';
  675. oid
  676. ------
  677. 1259
  678. (1 row)
  679. -- bit operations
  680. SELECT q1, q2, q1 & q2 AS "and", q1 | q2 AS "or", q1 # q2 AS "xor", ~q1 AS "not" FROM INT8_TBL;
  681. q1 | q2 | and | or | xor | not
  682. ------------------+-------------------+------------------+------------------+------------------+-------------------
  683. 123 | 456 | 72 | 507 | 435 | -124
  684. 123 | 4567890123456789 | 17 | 4567890123456895 | 4567890123456878 | -124
  685. 4567890123456789 | 123 | 17 | 4567890123456895 | 4567890123456878 | -4567890123456790
  686. 4567890123456789 | 4567890123456789 | 4567890123456789 | 4567890123456789 | 0 | -4567890123456790
  687. 4567890123456789 | -4567890123456789 | 1 | -1 | -2 | -4567890123456790
  688. (5 rows)
  689. SELECT q1, q1 << 2 AS "shl", q1 >> 3 AS "shr" FROM INT8_TBL;
  690. q1 | shl | shr
  691. ------------------+-------------------+-----------------
  692. 123 | 492 | 15
  693. 123 | 492 | 15
  694. 4567890123456789 | 18271560493827156 | 570986265432098
  695. 4567890123456789 | 18271560493827156 | 570986265432098
  696. 4567890123456789 | 18271560493827156 | 570986265432098
  697. (5 rows)
  698. -- generate_series
  699. SELECT * FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8);
  700. generate_series
  701. ------------------
  702. 4567890123456789
  703. 4567890123456790
  704. 4567890123456791
  705. 4567890123456792
  706. 4567890123456793
  707. 4567890123456794
  708. 4567890123456795
  709. 4567890123456796
  710. 4567890123456797
  711. 4567890123456798
  712. 4567890123456799
  713. (11 rows)
  714. SELECT * FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8, 0);
  715. ERROR: step size cannot equal zero
  716. SELECT * FROM generate_series('+4567890123456789'::int8, '+4567890123456799'::int8, 2);
  717. generate_series
  718. ------------------
  719. 4567890123456789
  720. 4567890123456791
  721. 4567890123456793
  722. 4567890123456795
  723. 4567890123456797
  724. 4567890123456799
  725. (6 rows)
  726. -- corner case
  727. SELECT (-1::int8<<63)::text;
  728. text
  729. ----------------------
  730. -9223372036854775808
  731. (1 row)
  732. SELECT ((-1::int8<<63)+1)::text;
  733. text
  734. ----------------------
  735. -9223372036854775807
  736. (1 row)
  737. -- check sane handling of INT64_MIN overflow cases
  738. SELECT (-9223372036854775808)::int8 * (-1)::int8;
  739. ERROR: bigint out of range
  740. SELECT (-9223372036854775808)::int8 / (-1)::int8;
  741. ERROR: bigint out of range
  742. SELECT (-9223372036854775808)::int8 % (-1)::int8;
  743. ?column?
  744. ----------
  745. 0
  746. (1 row)
  747. SELECT (-9223372036854775808)::int8 * (-1)::int4;
  748. ERROR: bigint out of range
  749. SELECT (-9223372036854775808)::int8 / (-1)::int4;
  750. ERROR: bigint out of range
  751. SELECT (-9223372036854775808)::int8 % (-1)::int4;
  752. ?column?
  753. ----------
  754. 0
  755. (1 row)
  756. SELECT (-9223372036854775808)::int8 * (-1)::int2;
  757. ERROR: bigint out of range
  758. SELECT (-9223372036854775808)::int8 / (-1)::int2;
  759. ERROR: bigint out of range
  760. SELECT (-9223372036854775808)::int8 % (-1)::int2;
  761. ?column?
  762. ----------
  763. 0
  764. (1 row)
  765. -- check rounding when casting from float
  766. SELECT x, x::int8 AS int8_value
  767. FROM (VALUES (-2.5::float8),
  768. (-1.5::float8),
  769. (-0.5::float8),
  770. (0.0::float8),
  771. (0.5::float8),
  772. (1.5::float8),
  773. (2.5::float8)) t(x);
  774. x | int8_value
  775. ------+------------
  776. -2.5 | -2
  777. -1.5 | -2
  778. -0.5 | 0
  779. 0 | 0
  780. 0.5 | 0
  781. 1.5 | 2
  782. 2.5 | 2
  783. (7 rows)
  784. -- check rounding when casting from numeric
  785. SELECT x, x::int8 AS int8_value
  786. FROM (VALUES (-2.5::numeric),
  787. (-1.5::numeric),
  788. (-0.5::numeric),
  789. (0.0::numeric),
  790. (0.5::numeric),
  791. (1.5::numeric),
  792. (2.5::numeric)) t(x);
  793. x | int8_value
  794. ------+------------
  795. -2.5 | -3
  796. -1.5 | -2
  797. -0.5 | -1
  798. 0.0 | 0
  799. 0.5 | 1
  800. 1.5 | 2
  801. 2.5 | 3
  802. (7 rows)
  803. -- test gcd()
  804. SELECT a, b, gcd(a, b), gcd(a, -b), gcd(b, a), gcd(-b, a)
  805. FROM (VALUES (0::int8, 0::int8),
  806. (0::int8, 29893644334::int8),
  807. (288484263558::int8, 29893644334::int8),
  808. (-288484263558::int8, 29893644334::int8),
  809. ((-9223372036854775808)::int8, 1::int8),
  810. ((-9223372036854775808)::int8, 9223372036854775807::int8),
  811. ((-9223372036854775808)::int8, 4611686018427387904::int8)) AS v(a, b);
  812. a | b | gcd | gcd | gcd | gcd
  813. ----------------------+---------------------+---------------------+---------------------+---------------------+---------------------
  814. 0 | 0 | 0 | 0 | 0 | 0
  815. 0 | 29893644334 | 29893644334 | 29893644334 | 29893644334 | 29893644334
  816. 288484263558 | 29893644334 | 6835958 | 6835958 | 6835958 | 6835958
  817. -288484263558 | 29893644334 | 6835958 | 6835958 | 6835958 | 6835958
  818. -9223372036854775808 | 1 | 1 | 1 | 1 | 1
  819. -9223372036854775808 | 9223372036854775807 | 1 | 1 | 1 | 1
  820. -9223372036854775808 | 4611686018427387904 | 4611686018427387904 | 4611686018427387904 | 4611686018427387904 | 4611686018427387904
  821. (7 rows)
  822. SELECT gcd((-9223372036854775808)::int8, 0::int8); -- overflow
  823. ERROR: bigint out of range
  824. SELECT gcd((-9223372036854775808)::int8, (-9223372036854775808)::int8); -- overflow
  825. ERROR: bigint out of range
  826. -- test lcm()
  827. SELECT a, b, lcm(a, b), lcm(a, -b), lcm(b, a), lcm(-b, a)
  828. FROM (VALUES (0::int8, 0::int8),
  829. (0::int8, 29893644334::int8),
  830. (29893644334::int8, 29893644334::int8),
  831. (288484263558::int8, 29893644334::int8),
  832. (-288484263558::int8, 29893644334::int8),
  833. ((-9223372036854775808)::int8, 0::int8)) AS v(a, b);
  834. a | b | lcm | lcm | lcm | lcm
  835. ----------------------+-------------+------------------+------------------+------------------+------------------
  836. 0 | 0 | 0 | 0 | 0 | 0
  837. 0 | 29893644334 | 0 | 0 | 0 | 0
  838. 29893644334 | 29893644334 | 29893644334 | 29893644334 | 29893644334 | 29893644334
  839. 288484263558 | 29893644334 | 1261541684539134 | 1261541684539134 | 1261541684539134 | 1261541684539134
  840. -288484263558 | 29893644334 | 1261541684539134 | 1261541684539134 | 1261541684539134 | 1261541684539134
  841. -9223372036854775808 | 0 | 0 | 0 | 0 | 0
  842. (6 rows)
  843. SELECT lcm((-9223372036854775808)::int8, 1::int8); -- overflow
  844. ERROR: bigint out of range
  845. SELECT lcm(9223372036854775807::int8, 9223372036854775806::int8); -- overflow
  846. ERROR: bigint out of range