001/* 002 * Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com). 003 * <p> 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * <p> 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * <p> 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package com.mybatisflex.core.query; 017 018import com.mybatisflex.core.util.ArrayUtil; 019import com.mybatisflex.core.util.LambdaGetter; 020import com.mybatisflex.core.util.LambdaUtil; 021 022import static com.mybatisflex.core.constant.FuncName.*; 023 024/** 025 * SQL 函数。 026 */ 027@SuppressWarnings("unused") 028public class QueryMethods { 029 030 private QueryMethods() { 031 } 032 033 // === 数学函数 === 034 035 /** 036 * 返回 x 的绝对值。 037 */ 038 public static QueryColumn abs(String columnX) { 039 return new FunctionQueryColumn(ABS, columnX); 040 } 041 042 /** 043 * 返回 x 的绝对值。 044 */ 045 public static QueryColumn abs(QueryColumn columnX) { 046 return new FunctionQueryColumn(ABS, columnX); 047 } 048 049 /** 050 * 返回 x 的绝对值。 051 */ 052 public static <T> QueryColumn abs(LambdaGetter<T> columnX) { 053 return new FunctionQueryColumn(ABS, LambdaUtil.getQueryColumn(columnX)); 054 } 055 056 /** 057 * 返回大于或等于 x 的最小整数(向上取整)。 058 */ 059 public static QueryColumn ceil(String columnX) { 060 return new FunctionQueryColumn(CEIL, columnX); 061 } 062 063 /** 064 * 返回大于或等于 x 的最小整数(向上取整)。 065 */ 066 public static QueryColumn ceil(QueryColumn columnX) { 067 return new FunctionQueryColumn(CEIL, columnX); 068 } 069 070 /** 071 * 返回大于或等于 x 的最小整数(向上取整)。 072 */ 073 public static <T> QueryColumn ceil(LambdaGetter<T> columnX) { 074 return new FunctionQueryColumn(CEIL, LambdaUtil.getQueryColumn(columnX)); 075 } 076 077 /** 078 * 返回大于或等于 x 的最小整数(向上取整)。 079 */ 080 public static QueryColumn ceiling(String columnX) { 081 return new FunctionQueryColumn(CEILING, columnX); 082 } 083 084 /** 085 * 返回大于或等于 x 的最小整数(向上取整)。 086 */ 087 public static QueryColumn ceiling(QueryColumn columnX) { 088 return new FunctionQueryColumn(CEILING, columnX); 089 } 090 091 /** 092 * 返回大于或等于 x 的最小整数(向上取整)。 093 */ 094 public static <T> QueryColumn ceiling(LambdaGetter<T> columnX) { 095 return new FunctionQueryColumn(CEILING, LambdaUtil.getQueryColumn(columnX)); 096 } 097 098 /** 099 * 返回小于或等于 x 的最大整数(向下取整)。 100 */ 101 public static QueryColumn floor(String columnX) { 102 return new FunctionQueryColumn(FLOOR, columnX); 103 } 104 105 /** 106 * 返回小于或等于 x 的最大整数(向下取整)。 107 */ 108 public static QueryColumn floor(QueryColumn columnX) { 109 return new FunctionQueryColumn(FLOOR, columnX); 110 } 111 112 /** 113 * 返回小于或等于 x 的最大整数(向下取整)。 114 */ 115 public static <T> QueryColumn floor(LambdaGetter<T> columnX) { 116 return new FunctionQueryColumn(FLOOR, LambdaUtil.getQueryColumn(columnX)); 117 } 118 119 /** 120 * 返回 0~1 的随机数。 121 */ 122 public static QueryColumn rand() { 123 return new FunctionQueryColumn(RAND); 124 } 125 126 /** 127 * 返回 0~1 的随机数,x 值相同时返回的随机数相同。 128 */ 129 public static QueryColumn rand(String columnX) { 130 return new FunctionQueryColumn(RAND, columnX); 131 } 132 133 /** 134 * 返回 0~1 的随机数,x 值相同时返回的随机数相同。 135 */ 136 public static QueryColumn rand(QueryColumn columnX) { 137 return new FunctionQueryColumn(RAND, columnX); 138 } 139 140 /** 141 * 返回 0~1 的随机数,x 值相同时返回的随机数相同。 142 */ 143 public static <T> QueryColumn rand(LambdaGetter<T> columnX) { 144 return new FunctionQueryColumn(RAND, LambdaUtil.getQueryColumn(columnX)); 145 } 146 147 /** 148 * 返回 x 的符号,x 是负数、0、正数分别返回 -1、0、1。 149 */ 150 public static QueryColumn sign(String columnX) { 151 return new FunctionQueryColumn(SIGN, columnX); 152 } 153 154 /** 155 * 返回 x 的符号,x 是负数、0、正数分别返回 -1、0、1。 156 */ 157 public static QueryColumn sign(QueryColumn columnX) { 158 return new FunctionQueryColumn(SIGN, columnX); 159 } 160 161 /** 162 * 返回 x 的符号,x 是负数、0、正数分别返回 -1、0、1。 163 */ 164 public static <T> QueryColumn sign(LambdaGetter<T> columnX) { 165 return new FunctionQueryColumn(SIGN, LambdaUtil.getQueryColumn(columnX)); 166 } 167 168 /** 169 * 返回圆周率。 170 */ 171 public static QueryColumn pi() { 172 return new FunctionQueryColumn(PI); 173 } 174 175 /** 176 * 返回数值 x 保留到小数点后 y 位的值。 177 */ 178 public static QueryColumn truncate(String columnX, String columnY) { 179 return new FunctionQueryColumn(TRUNCATE, columnX, columnY); 180 } 181 182 /** 183 * 返回数值 x 保留到小数点后 y 位的值。 184 */ 185 public static QueryColumn truncate(QueryColumn columnX, QueryColumn columnY) { 186 return new FunctionQueryColumn(TRUNCATE, columnX, columnY); 187 } 188 189 /** 190 * 返回数值 x 保留到小数点后 y 位的值。 191 */ 192 public static <X, Y> QueryColumn truncate(LambdaGetter<X> columnX, LambdaGetter<Y> columnY) { 193 return new FunctionQueryColumn(TRUNCATE, LambdaUtil.getQueryColumn(columnX), LambdaUtil.getQueryColumn(columnY)); 194 } 195 196 /** 197 * 返回数值 x 保留到小数点后 y 位的值。 198 */ 199 public static QueryColumn truncate(String columnX, Integer y) { 200 return new FunctionQueryColumn(TRUNCATE, new QueryColumn(columnX), number(y)); 201 } 202 203 /** 204 * 返回数值 x 保留到小数点后 y 位的值。 205 */ 206 public static QueryColumn truncate(QueryColumn columnX, Integer y) { 207 return new FunctionQueryColumn(TRUNCATE, columnX, number(y)); 208 } 209 210 /** 211 * 返回数值 x 保留到小数点后 y 位的值。 212 */ 213 public static <T> QueryColumn truncate(LambdaGetter<T> columnX, Integer y) { 214 return new FunctionQueryColumn(TRUNCATE, LambdaUtil.getQueryColumn(columnX), number(y)); 215 } 216 217 /** 218 * 返回离 x 最近的整数(四舍五入)。 219 */ 220 public static QueryColumn round(String columnX) { 221 return new FunctionQueryColumn(ROUND, columnX); 222 } 223 224 /** 225 * 返回离 x 最近的整数(四舍五入)。 226 */ 227 public static QueryColumn round(QueryColumn columnX) { 228 return new FunctionQueryColumn(ROUND, columnX); 229 } 230 231 /** 232 * 返回离 x 最近的整数(四舍五入)。 233 */ 234 public static <T> QueryColumn round(LambdaGetter<T> columnX) { 235 return new FunctionQueryColumn(ROUND, LambdaUtil.getQueryColumn(columnX)); 236 } 237 238 /** 239 * 保留 x 小数点后 y 位的值,但截断时要四舍五入。 240 */ 241 public static QueryColumn round(String columnX, String columnY) { 242 return new FunctionQueryColumn(ROUND, columnX, columnY); 243 } 244 245 /** 246 * 保留 x 小数点后 y 位的值,但截断时要四舍五入。 247 */ 248 public static QueryColumn round(QueryColumn columnX, QueryColumn columnY) { 249 return new FunctionQueryColumn(ROUND, columnX, columnY); 250 } 251 252 /** 253 * 保留 x 小数点后 y 位的值,但截断时要四舍五入。 254 */ 255 public static <X, Y> QueryColumn round(LambdaGetter<X> columnX, LambdaGetter<Y> columnY) { 256 return new FunctionQueryColumn(ROUND, LambdaUtil.getQueryColumn(columnX), LambdaUtil.getQueryColumn(columnY)); 257 } 258 259 /** 260 * 保留 x 小数点后 y 位的值,但截断时要四舍五入。 261 */ 262 public static QueryColumn round(String columnX, Integer y) { 263 return new FunctionQueryColumn(ROUND, new QueryColumn(columnX), number(y)); 264 } 265 266 /** 267 * 保留 x 小数点后 y 位的值,但截断时要四舍五入。 268 */ 269 public static QueryColumn round(QueryColumn columnX, Integer y) { 270 return new FunctionQueryColumn(ROUND, columnX, number(y)); 271 } 272 273 /** 274 * 保留 x 小数点后 y 位的值,但截断时要四舍五入。 275 */ 276 public static <T> QueryColumn round(LambdaGetter<T> columnX, Integer y) { 277 return new FunctionQueryColumn(ROUND, LambdaUtil.getQueryColumn(columnX), number(y)); 278 } 279 280 /** 281 * 返回 x 的 y 次方。 282 */ 283 public static QueryColumn pow(String columnX, String columnY) { 284 return new FunctionQueryColumn(POW, columnX, columnY); 285 } 286 287 /** 288 * 返回 x 的 y 次方。 289 */ 290 public static QueryColumn pow(QueryColumn columnX, QueryColumn columnY) { 291 return new FunctionQueryColumn(POW, columnX, columnY); 292 } 293 294 /** 295 * 返回 x 的 y 次方。 296 */ 297 public static <X, Y> QueryColumn pow(LambdaGetter<X> columnX, LambdaGetter<Y> columnY) { 298 return new FunctionQueryColumn(POW, LambdaUtil.getQueryColumn(columnX), LambdaUtil.getQueryColumn(columnY)); 299 } 300 301 /** 302 * 返回 x 的 y 次方。 303 */ 304 public static QueryColumn pow(String columnX, Integer y) { 305 return new FunctionQueryColumn(POW, new QueryColumn(columnX), number(y)); 306 } 307 308 /** 309 * 返回 x 的 y 次方。 310 */ 311 public static QueryColumn pow(QueryColumn columnX, Integer y) { 312 return new FunctionQueryColumn(POW, columnX, number(y)); 313 } 314 315 /** 316 * 返回 x 的 y 次方。 317 */ 318 public static <T> QueryColumn pow(LambdaGetter<T> columnX, Integer y) { 319 return new FunctionQueryColumn(POW, LambdaUtil.getQueryColumn(columnX), number(y)); 320 } 321 322 /** 323 * 返回 x 的 y 次方。 324 */ 325 public static QueryColumn power(String columnX, String columnY) { 326 return new FunctionQueryColumn(POWER, columnX, columnY); 327 } 328 329 /** 330 * 返回 x 的 y 次方。 331 */ 332 public static QueryColumn power(QueryColumn columnX, QueryColumn columnY) { 333 return new FunctionQueryColumn(POWER, columnX, columnY); 334 } 335 336 /** 337 * 返回 x 的 y 次方。 338 */ 339 public static <X, Y> QueryColumn power(LambdaGetter<X> columnX, LambdaGetter<Y> columnY) { 340 return new FunctionQueryColumn(POWER, LambdaUtil.getQueryColumn(columnX), LambdaUtil.getQueryColumn(columnY)); 341 } 342 343 /** 344 * 返回 x 的 y 次方。 345 */ 346 public static QueryColumn power(String columnX, Integer y) { 347 return new FunctionQueryColumn(POWER, new QueryColumn(columnX), number(y)); 348 } 349 350 /** 351 * 返回 x 的 y 次方。 352 */ 353 public static QueryColumn power(QueryColumn columnX, Integer y) { 354 return new FunctionQueryColumn(POWER, columnX, number(y)); 355 } 356 357 /** 358 * 返回 x 的 y 次方。 359 */ 360 public static <T> QueryColumn power(LambdaGetter<T> columnX, Integer y) { 361 return new FunctionQueryColumn(POWER, LambdaUtil.getQueryColumn(columnX), number(y)); 362 } 363 364 /** 365 * 返回 x 的平方根。 366 */ 367 public static QueryColumn sqrt(String columnX) { 368 return new FunctionQueryColumn(SQRT, columnX); 369 } 370 371 /** 372 * 返回 x 的平方根。 373 */ 374 public static QueryColumn sqrt(QueryColumn columnX) { 375 return new FunctionQueryColumn(SQRT, columnX); 376 } 377 378 /** 379 * 返回 x 的平方根。 380 */ 381 public static <T> QueryColumn sqrt(LambdaGetter<T> columnX) { 382 return new FunctionQueryColumn(SQRT, LambdaUtil.getQueryColumn(columnX)); 383 } 384 385 /** 386 * 返回 e 的 x 次方。 387 */ 388 public static QueryColumn exp(String columnX) { 389 return new FunctionQueryColumn(EXP, columnX); 390 } 391 392 /** 393 * 返回 e 的 x 次方。 394 */ 395 public static QueryColumn exp(QueryColumn columnX) { 396 return new FunctionQueryColumn(EXP, columnX); 397 } 398 399 /** 400 * 返回 e 的 x 次方。 401 */ 402 public static <T> QueryColumn exp(LambdaGetter<T> columnX) { 403 return new FunctionQueryColumn(EXP, LambdaUtil.getQueryColumn(columnX)); 404 } 405 406 /** 407 * 返回 x 除以 y 以后的余数。 408 */ 409 public static QueryColumn mod(String columnX, String columnY) { 410 return new FunctionQueryColumn(MOD, columnX, columnY); 411 } 412 413 /** 414 * 返回 x 除以 y 以后的余数。 415 */ 416 public static QueryColumn mod(QueryColumn columnX, QueryColumn columnY) { 417 return new FunctionQueryColumn(MOD, columnX, columnY); 418 } 419 420 /** 421 * 返回 x 除以 y 以后的余数。 422 */ 423 public static <X, Y> QueryColumn mod(LambdaGetter<X> columnX, LambdaGetter<Y> columnY) { 424 return new FunctionQueryColumn(MOD, LambdaUtil.getQueryColumn(columnX), LambdaUtil.getQueryColumn(columnY)); 425 } 426 427 /** 428 * 返回 x 除以 y 以后的余数。 429 */ 430 public static QueryColumn mod(String columnX, Integer y) { 431 return new FunctionQueryColumn(MOD, new QueryColumn(columnX), number(y)); 432 } 433 434 /** 435 * 返回 x 除以 y 以后的余数。 436 */ 437 public static QueryColumn mod(QueryColumn columnX, Integer y) { 438 return new FunctionQueryColumn(MOD, columnX, number(y)); 439 } 440 441 /** 442 * 返回 x 除以 y 以后的余数。 443 */ 444 public static <T> QueryColumn mod(LambdaGetter<T> columnX, Integer y) { 445 return new FunctionQueryColumn(MOD, LambdaUtil.getQueryColumn(columnX), number(y)); 446 } 447 448 /** 449 * 返回自然对数(以 e 为底的对数)。 450 */ 451 public static QueryColumn log(String columnX) { 452 return new FunctionQueryColumn(LOG, columnX); 453 } 454 455 /** 456 * 返回自然对数(以 e 为底的对数)。 457 */ 458 public static QueryColumn log(QueryColumn columnX) { 459 return new FunctionQueryColumn(LOG, columnX); 460 } 461 462 /** 463 * 返回自然对数(以 e 为底的对数)。 464 */ 465 public static <T> QueryColumn log(LambdaGetter<T> columnX) { 466 return new FunctionQueryColumn(LOG, LambdaUtil.getQueryColumn(columnX)); 467 } 468 469 /** 470 * 返回以 10 为底的对数。 471 */ 472 public static QueryColumn log10(String columnX) { 473 return new FunctionQueryColumn(LOG10, columnX); 474 } 475 476 /** 477 * 返回以 10 为底的对数。 478 */ 479 public static QueryColumn log10(QueryColumn columnX) { 480 return new FunctionQueryColumn(LOG10, columnX); 481 } 482 483 /** 484 * 返回以 10 为底的对数。 485 */ 486 public static <T> QueryColumn log10(LambdaGetter<T> columnX) { 487 return new FunctionQueryColumn(LOG10, LambdaUtil.getQueryColumn(columnX)); 488 } 489 490 /** 491 * 将角度转换为弧度。 492 */ 493 public static QueryColumn radians(String columnX) { 494 return new FunctionQueryColumn(RADIANS, columnX); 495 } 496 497 /** 498 * 将角度转换为弧度。 499 */ 500 public static QueryColumn radians(QueryColumn columnX) { 501 return new FunctionQueryColumn(RADIANS, columnX); 502 } 503 504 /** 505 * 将角度转换为弧度。 506 */ 507 public static <T> QueryColumn radians(LambdaGetter<T> columnX) { 508 return new FunctionQueryColumn(RADIANS, LambdaUtil.getQueryColumn(columnX)); 509 } 510 511 /** 512 * 将弧度转换为角度。 513 */ 514 public static QueryColumn degrees(String columnX) { 515 return new FunctionQueryColumn(DEGREES, columnX); 516 } 517 518 /** 519 * 将弧度转换为角度。 520 */ 521 public static QueryColumn degrees(QueryColumn columnX) { 522 return new FunctionQueryColumn(DEGREES, columnX); 523 } 524 525 /** 526 * 将弧度转换为角度。 527 */ 528 public static <T> QueryColumn degrees(LambdaGetter<T> columnX) { 529 return new FunctionQueryColumn(DEGREES, LambdaUtil.getQueryColumn(columnX)); 530 } 531 532 /** 533 * 求正弦值。 534 */ 535 public static QueryColumn sin(String columnX) { 536 return new FunctionQueryColumn(SIN, columnX); 537 } 538 539 /** 540 * 求正弦值。 541 */ 542 public static QueryColumn sin(QueryColumn columnX) { 543 return new FunctionQueryColumn(SIN, columnX); 544 } 545 546 /** 547 * 求正弦值。 548 */ 549 public static <T> QueryColumn sin(LambdaGetter<T> columnX) { 550 return new FunctionQueryColumn(SIN, LambdaUtil.getQueryColumn(columnX)); 551 } 552 553 /** 554 * 求反正弦值。 555 */ 556 public static QueryColumn asin(String columnX) { 557 return new FunctionQueryColumn(ASIN, columnX); 558 } 559 560 /** 561 * 求反正弦值。 562 */ 563 public static QueryColumn asin(QueryColumn columnX) { 564 return new FunctionQueryColumn(ASIN, columnX); 565 } 566 567 /** 568 * 求反正弦值。 569 */ 570 public static <T> QueryColumn asin(LambdaGetter<T> columnX) { 571 return new FunctionQueryColumn(ASIN, LambdaUtil.getQueryColumn(columnX)); 572 } 573 574 /** 575 * 求余弦值。 576 */ 577 public static QueryColumn cos(String columnX) { 578 return new FunctionQueryColumn(COS, columnX); 579 } 580 581 /** 582 * 求余弦值。 583 */ 584 public static QueryColumn cos(QueryColumn columnX) { 585 return new FunctionQueryColumn(COS, columnX); 586 } 587 588 /** 589 * 求余弦值。 590 */ 591 public static <T> QueryColumn cos(LambdaGetter<T> columnX) { 592 return new FunctionQueryColumn(COS, LambdaUtil.getQueryColumn(columnX)); 593 } 594 595 /** 596 * 求反余弦值。 597 */ 598 public static QueryColumn acos(String columnX) { 599 return new FunctionQueryColumn(ACOS, columnX); 600 } 601 602 /** 603 * 求反余弦值。 604 */ 605 public static QueryColumn acos(QueryColumn columnX) { 606 return new FunctionQueryColumn(ACOS, columnX); 607 } 608 609 /** 610 * 求反余弦值。 611 */ 612 public static <T> QueryColumn acos(LambdaGetter<T> columnX) { 613 return new FunctionQueryColumn(ACOS, LambdaUtil.getQueryColumn(columnX)); 614 } 615 616 /** 617 * 求正切值。 618 */ 619 public static QueryColumn tan(String columnX) { 620 return new FunctionQueryColumn(TAN, columnX); 621 } 622 623 /** 624 * 求正切值。 625 */ 626 public static QueryColumn tan(QueryColumn columnX) { 627 return new FunctionQueryColumn(TAN, columnX); 628 } 629 630 /** 631 * 求正切值。 632 */ 633 public static <T> QueryColumn tan(LambdaGetter<T> columnX) { 634 return new FunctionQueryColumn(TAN, LambdaUtil.getQueryColumn(columnX)); 635 } 636 637 /** 638 * 求反正切值。 639 */ 640 public static QueryColumn atan(String columnX) { 641 return new FunctionQueryColumn(ATAN, columnX); 642 } 643 644 /** 645 * 求反正切值。 646 */ 647 public static QueryColumn atan(QueryColumn columnX) { 648 return new FunctionQueryColumn(ATAN, columnX); 649 } 650 651 /** 652 * 求反正切值。 653 */ 654 public static <T> QueryColumn atan(LambdaGetter<T> columnX) { 655 return new FunctionQueryColumn(ATAN, LambdaUtil.getQueryColumn(columnX)); 656 } 657 658 /** 659 * 求余切值。 660 */ 661 public static QueryColumn cot(String columnX) { 662 return new FunctionQueryColumn(COT, columnX); 663 } 664 665 /** 666 * 求余切值。 667 */ 668 public static QueryColumn cot(QueryColumn columnX) { 669 return new FunctionQueryColumn(COT, columnX); 670 } 671 672 /** 673 * 求余切值。 674 */ 675 public static <T> QueryColumn cot(LambdaGetter<T> columnX) { 676 return new FunctionQueryColumn(COT, LambdaUtil.getQueryColumn(columnX)); 677 } 678 679 // === 字符串函数 === 680 681 /** 682 * 返回字符串 s 的字符数。 683 */ 684 public static QueryColumn charLength(String columnS) { 685 return new FunctionQueryColumn(CHAR_LENGTH, columnS); 686 } 687 688 /** 689 * 返回字符串 s 的字符数。 690 */ 691 public static QueryColumn charLength(QueryColumn columnS) { 692 return new FunctionQueryColumn(CHAR_LENGTH, columnS); 693 } 694 695 /** 696 * 返回字符串 s 的字符数。 697 */ 698 public static <T> QueryColumn charLength(LambdaGetter<T> columnS) { 699 return new FunctionQueryColumn(CHAR_LENGTH, LambdaUtil.getQueryColumn(columnS)); 700 } 701 702 /** 703 * 返回字符串 s 的长度。 704 */ 705 public static QueryColumn length(String columnS) { 706 return new FunctionQueryColumn(LENGTH, columnS); 707 } 708 709 /** 710 * 返回字符串 s 的长度。 711 */ 712 public static QueryColumn length(QueryColumn columnS) { 713 return new FunctionQueryColumn(LENGTH, columnS); 714 } 715 716 /** 717 * 返回字符串 s 的长度。 718 */ 719 public static <T> QueryColumn length(LambdaGetter<T> columnS) { 720 return new FunctionQueryColumn(LENGTH, LambdaUtil.getQueryColumn(columnS)); 721 } 722 723 /** 724 * 将字符串 s1,s2 等多个字符串合并为一个字符串。 725 */ 726 public static QueryColumn concat(String columnS1, String columnS2, String... columnN) { 727 return new FunctionQueryColumn(CONCAT, ArrayUtil.concat(new String[]{columnS1, columnS2}, columnN)); 728 } 729 730 /** 731 * 将字符串 s1,s2 等多个字符串合并为一个字符串。 732 */ 733 public static QueryColumn concat(QueryColumn columnS1, QueryColumn columnS2, QueryColumn... columnN) { 734 return new FunctionQueryColumn(CONCAT, ArrayUtil.concat(new QueryColumn[]{columnS1, columnS2}, columnN)); 735 } 736 737 /** 738 * 同 CONCAT(s1, s2, ...),但是每个字符串之间要加上 x。 739 */ 740 public static QueryColumn concatWs(String columnX, String columnS1, String columnS2, String... columnN) { 741 return new FunctionQueryColumn(CONCAT_WS, ArrayUtil.concat(new String[]{columnX, columnS1, columnS2}, columnN)); 742 } 743 744 /** 745 * 同 CONCAT(s1, s2, ...),但是每个字符串之间要加上 x。 746 */ 747 public static QueryColumn concatWs(QueryColumn columnX, QueryColumn columnS1, QueryColumn columnS2, QueryColumn... columnN) { 748 return new FunctionQueryColumn(CONCAT_WS, ArrayUtil.concat(new QueryColumn[]{columnX, columnS1, columnS2}, columnN)); 749 } 750 751 /** 752 * 将字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串。 753 */ 754 public static QueryColumn insert(String columnS1, String columnX, String columnLen, String columnS2) { 755 return new FunctionQueryColumn(INSERT, columnS1, columnX, columnLen, columnS2); 756 } 757 758 /** 759 * 将字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串。 760 */ 761 public static QueryColumn insert(QueryColumn columnS1, QueryColumn columnX, QueryColumn columnLen, QueryColumn columnS2) { 762 return new FunctionQueryColumn(INSERT, columnS1, columnX, columnLen, columnS2); 763 } 764 765 /** 766 * 将字符串 s 的所有字符都变成大写字母。 767 */ 768 public static QueryColumn upper(String columnS) { 769 return new FunctionQueryColumn(UPPER, columnS); 770 } 771 772 /** 773 * 将字符串 s 的所有字符都变成大写字母。 774 */ 775 public static QueryColumn upper(QueryColumn columnS) { 776 return new FunctionQueryColumn(UPPER, columnS); 777 } 778 779 /** 780 * 将字符串 s 的所有字符都变成大写字母。 781 */ 782 public static <T> QueryColumn upper(LambdaGetter<T> columnS) { 783 return new FunctionQueryColumn(UPPER, LambdaUtil.getQueryColumn(columnS)); 784 } 785 786 /** 787 * 将字符串 s 的所有字符都变成小写字母。 788 */ 789 public static QueryColumn lower(String columnS) { 790 return new FunctionQueryColumn(LOWER, columnS); 791 } 792 793 /** 794 * 将字符串 s 的所有字符都变成小写字母。 795 */ 796 public static QueryColumn lower(QueryColumn columnS) { 797 return new FunctionQueryColumn(LOWER, columnS); 798 } 799 800 /** 801 * 将字符串 s 的所有字符都变成小写字母。 802 */ 803 public static <T> QueryColumn lower(LambdaGetter<T> columnS) { 804 return new FunctionQueryColumn(LOWER, LambdaUtil.getQueryColumn(columnS)); 805 } 806 807 /** 808 * 返回字符串 s 的前 n 个字符。 809 */ 810 public static QueryColumn left(String columnS, int length) { 811 return new FunctionQueryColumn(LEFT, string(columnS), number(length)); 812 } 813 814 /** 815 * 返回字符串 s 的前 n 个字符。 816 */ 817 public static QueryColumn left(QueryColumn columnS, int length) { 818 return new FunctionQueryColumn(LEFT, columnS, number(length)); 819 } 820 821 /** 822 * 返回字符串 s 的前 n 个字符。 823 */ 824 public static <S, N> QueryColumn left(LambdaGetter<S> columnS, int length) { 825 return new FunctionQueryColumn(LEFT, LambdaUtil.getQueryColumn(columnS), number(length)); 826 } 827 828 829 /** 830 * 返回字符串 s 的后 length 个字符。 831 */ 832 public static QueryColumn right(String columnS, int length) { 833 return new FunctionQueryColumn(RIGHT, string(columnS), number(length)); 834 } 835 836 /** 837 * 返回字符串 s 的后 length 个字符。 838 */ 839 public static QueryColumn right(QueryColumn columnS, int length) { 840 return new FunctionQueryColumn(RIGHT, columnS, number(length)); 841 } 842 843 /** 844 * 返回字符串 s 的后 length 个字符。 845 */ 846 public static <S, N> QueryColumn right(LambdaGetter<S> columnS, int length) { 847 return new FunctionQueryColumn(RIGHT, LambdaUtil.getQueryColumn(columnS), number(length)); 848 } 849 850 /** 851 * 字符串 s2 来填充 s1 的开始处,使字符串长度达到 len。 852 */ 853 public static QueryColumn lpad(String columnS1, String columnLen, String columnS2) { 854 return new FunctionQueryColumn(LPAD, columnS1, columnLen, columnS2); 855 } 856 857 /** 858 * 字符串 s2 来填充 s1 的开始处,使字符串长度达到 len。 859 */ 860 public static QueryColumn lpad(QueryColumn columnS1, QueryColumn columnLen, QueryColumn columnS2) { 861 return new FunctionQueryColumn(LPAD, columnS1, columnLen, columnS2); 862 } 863 864 /** 865 * 字符串 s2 来填充 s1 的开始处,使字符串长度达到 len。 866 */ 867 public static <S1, L, S2> QueryColumn lpad(LambdaGetter<S1> columnS1, LambdaGetter<L> columnLen, LambdaGetter<S2> columnS2) { 868 return new FunctionQueryColumn(LPAD, LambdaUtil.getQueryColumn(columnS1), LambdaUtil.getQueryColumn(columnLen), LambdaUtil.getQueryColumn(columnS2)); 869 } 870 871 /** 872 * 字符串 s2 来填充 s1 的结尾处,使字符串长度达到 len。 873 */ 874 public static QueryColumn rpad(String columnS1, String columnLen, String columnS2) { 875 return new FunctionQueryColumn(RPAD, columnS1, columnLen, columnS2); 876 } 877 878 /** 879 * 字符串 s2 来填充 s1 的结尾处,使字符串长度达到 len。 880 */ 881 public static QueryColumn rpad(QueryColumn columnS1, QueryColumn columnLen, QueryColumn columnS2) { 882 return new FunctionQueryColumn(RPAD, columnS1, columnLen, columnS2); 883 } 884 885 /** 886 * 字符串 s2 来填充 s1 的结尾处,使字符串长度达到 len。 887 */ 888 public static <S1, L, S2> QueryColumn rpad(LambdaGetter<S1> columnS1, LambdaGetter<L> columnLen, LambdaGetter<S2> columnS2) { 889 return new FunctionQueryColumn(RPAD, LambdaUtil.getQueryColumn(columnS1), LambdaUtil.getQueryColumn(columnLen), LambdaUtil.getQueryColumn(columnS2)); 890 } 891 892 /** 893 * 去掉字符串 s 开始处的空格。 894 */ 895 public static QueryColumn ltrim(String columnS) { 896 return new FunctionQueryColumn(LTRIM, columnS); 897 } 898 899 /** 900 * 去掉字符串 s 开始处的空格。 901 */ 902 public static QueryColumn ltrim(QueryColumn columnS) { 903 return new FunctionQueryColumn(LTRIM, columnS); 904 } 905 906 /** 907 * 去掉字符串 s 开始处的空格。 908 */ 909 public static <T> QueryColumn ltrim(LambdaGetter<T> columnS) { 910 return new FunctionQueryColumn(LTRIM, LambdaUtil.getQueryColumn(columnS)); 911 } 912 913 /** 914 * 去掉字符串 s 结尾处的空格。 915 */ 916 public static QueryColumn rtrim(String columnS) { 917 return new FunctionQueryColumn(RTRIM, columnS); 918 } 919 920 /** 921 * 去掉字符串 s 结尾处的空格。 922 */ 923 public static QueryColumn rtrim(QueryColumn columnS) { 924 return new FunctionQueryColumn(RTRIM, columnS); 925 } 926 927 /** 928 * 去掉字符串 s 结尾处的空格。 929 */ 930 public static <T> QueryColumn rtrim(LambdaGetter<T> columnS) { 931 return new FunctionQueryColumn(RTRIM, LambdaUtil.getQueryColumn(columnS)); 932 } 933 934 /** 935 * 去掉字符串 s 开始处和结尾处的空格。 936 */ 937 public static QueryColumn trim(QueryColumn columnS) { 938 return new FunctionQueryColumn(TRIM, columnS); 939 } 940 941 /** 942 * 将字符串 s 重复 n 次。 943 */ 944 public static QueryColumn repeat(String columnS, String columnN) { 945 return new FunctionQueryColumn(REPEAT, columnS, columnN); 946 } 947 948 /** 949 * 将字符串 s 重复 n 次。 950 */ 951 public static QueryColumn repeat(QueryColumn columnS, QueryColumn columnN) { 952 return new FunctionQueryColumn(REPEAT, columnS, columnN); 953 } 954 955 /** 956 * 将字符串 s 重复 n 次。 957 */ 958 public static <S, N> QueryColumn repeat(LambdaGetter<S> columnS, LambdaGetter<N> columnN) { 959 return new FunctionQueryColumn(REPEAT, LambdaUtil.getQueryColumn(columnS), LambdaUtil.getQueryColumn(columnN)); 960 } 961 962 /** 963 * 将字符串 s 重复 n 次。 964 */ 965 public static QueryColumn repeat(String columnX, Integer n) { 966 return new FunctionQueryColumn(REPEAT, new QueryColumn(columnX), number(n)); 967 } 968 969 /** 970 * 将字符串 s 重复 n 次。 971 */ 972 public static QueryColumn repeat(QueryColumn columnX, Integer n) { 973 return new FunctionQueryColumn(REPEAT, columnX, number(n)); 974 } 975 976 /** 977 * 将字符串 s 重复 n 次。 978 */ 979 public static <T> QueryColumn repeat(LambdaGetter<T> columnX, Integer n) { 980 return new FunctionQueryColumn(REPEAT, LambdaUtil.getQueryColumn(columnX), number(n)); 981 } 982 983 /** 984 * 返回 n 个空格。 985 */ 986 public static QueryColumn space(String columnN) { 987 return new FunctionQueryColumn(SPACE, columnN); 988 } 989 990 /** 991 * 返回 n 个空格。 992 */ 993 public static QueryColumn space(QueryColumn columnN) { 994 return new FunctionQueryColumn(SPACE, columnN); 995 } 996 997 /** 998 * 返回 n 个空格。 999 */ 1000 public static <T> QueryColumn space(LambdaGetter<T> columnN) { 1001 return new FunctionQueryColumn(SPACE, LambdaUtil.getQueryColumn(columnN)); 1002 } 1003 1004 /** 1005 * 用字符串 s2 代替字符串 s 中的字符串 s1。 1006 */ 1007 public static QueryColumn replace(String columnS, String columnS1, String columnS2) { 1008 return new FunctionQueryColumn(REPLACE, columnS, columnS1, columnS2); 1009 } 1010 1011 /** 1012 * 用字符串 s2 代替字符串 s 中的字符串 s1。 1013 */ 1014 public static QueryColumn replace(QueryColumn columnS, QueryColumn columnS1, QueryColumn columnS2) { 1015 return new FunctionQueryColumn(REPLACE, columnS, columnS1, columnS2); 1016 } 1017 1018 /** 1019 * 用字符串 s2 代替字符串 s 中的字符串 s1。 1020 */ 1021 public static <S, S1, S2> QueryColumn replace(LambdaGetter<S> columnS, LambdaGetter<S1> columnS1, LambdaGetter<S2> columnS2) { 1022 return new FunctionQueryColumn(REPLACE, LambdaUtil.getQueryColumn(columnS), LambdaUtil.getQueryColumn(columnS1), LambdaUtil.getQueryColumn(columnS2)); 1023 } 1024 1025 /** 1026 * 比较字符串 s1 和 s2。 1027 */ 1028 public static QueryColumn strcmp(String columnS1, String columnS2) { 1029 return new FunctionQueryColumn(STRCMP, columnS1, columnS2); 1030 } 1031 1032 /** 1033 * 比较字符串 s1 和 s2。 1034 */ 1035 public static QueryColumn strcmp(QueryColumn columnS1, QueryColumn columnS2) { 1036 return new FunctionQueryColumn(STRCMP, columnS1, columnS2); 1037 } 1038 1039 /** 1040 * 比较字符串 s1 和 s2。 1041 */ 1042 public static <S1, S2> QueryColumn strcmp(LambdaGetter<S1> columnS1, LambdaGetter<S2> columnS2) { 1043 return new FunctionQueryColumn(STRCMP, LambdaUtil.getQueryColumn(columnS1), LambdaUtil.getQueryColumn(columnS2)); 1044 } 1045 1046 1047 /** 1048 * 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串。 1049 */ 1050 public static QueryColumn substring(String columnS, int position) { 1051 return new FunctionQueryColumn(SUBSTRING, string(columnS), number(position)); 1052 } 1053 1054 /** 1055 * 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串。 1056 */ 1057 public static QueryColumn substring(QueryColumn columnS, int position) { 1058 return new FunctionQueryColumn(SUBSTRING, columnS, number(position)); 1059 } 1060 1061 /** 1062 * 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串。 1063 */ 1064 public static <S, N, L> QueryColumn substring(LambdaGetter<S> columnS, int position) { 1065 return new FunctionQueryColumn(SUBSTRING, LambdaUtil.getQueryColumn(columnS), number(position)); 1066 } 1067 1068 /** 1069 * 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串。 1070 */ 1071 public static QueryColumn substring(String columnS, int position, int length) { 1072 return new FunctionQueryColumn(SUBSTRING, string(columnS), number(position), number(length)); 1073 } 1074 1075 /** 1076 * 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串。 1077 */ 1078 public static QueryColumn substring(QueryColumn columnS, int position, int length) { 1079 return new FunctionQueryColumn(SUBSTRING, columnS, number(position), number(length)); 1080 } 1081 1082 /** 1083 * 获取从字符串 s 中的第 position 个位置开始长度为 length 的字符串。 1084 */ 1085 public static <S, N, L> QueryColumn substring(LambdaGetter<S> columnS, int position, int length) { 1086 return new FunctionQueryColumn(SUBSTRING, LambdaUtil.getQueryColumn(columnS), number(position), number(length)); 1087 } 1088 1089 /** 1090 * 从字符串 s 中获取 s1 的开始位置。 1091 */ 1092 public static QueryColumn instr(String columnS, String columnS1) { 1093 return new FunctionQueryColumn(INSTR, columnS, columnS1); 1094 } 1095 1096 /** 1097 * 从字符串 s 中获取 s1 的开始位置。 1098 */ 1099 public static QueryColumn instr(QueryColumn columnS, QueryColumn columnS1) { 1100 return new FunctionQueryColumn(INSTR, columnS, columnS1); 1101 } 1102 1103 /** 1104 * 从字符串 s 中获取 s1 的开始位置。 1105 */ 1106 public static <S, S1> QueryColumn instr(LambdaGetter<S> columnS, LambdaGetter<S1> columnS1) { 1107 return new FunctionQueryColumn(INSTR, LambdaUtil.getQueryColumn(columnS), LambdaUtil.getQueryColumn(columnS1)); 1108 } 1109 1110 /** 1111 * 将字符串 s 的顺序反过来。 1112 */ 1113 public static QueryColumn reverse(String columnS) { 1114 return new FunctionQueryColumn(REVERSE, columnS); 1115 } 1116 1117 /** 1118 * 将字符串 s 的顺序反过来。 1119 */ 1120 public static QueryColumn reverse(QueryColumn columnS) { 1121 return new FunctionQueryColumn(REVERSE, columnS); 1122 } 1123 1124 /** 1125 * 将字符串 s 的顺序反过来。 1126 */ 1127 public static <T> QueryColumn reverse(LambdaGetter<T> columnS) { 1128 return new FunctionQueryColumn(REVERSE, LambdaUtil.getQueryColumn(columnS)); 1129 } 1130 1131 /** 1132 * 返回第 n 个字符串。 1133 */ 1134 public static QueryColumn elt(String columnN, String columnS1, String... columnSn) { 1135 return new FunctionQueryColumn(ELT, ArrayUtil.concat(new String[]{columnN, columnS1}, columnSn)); 1136 } 1137 1138 /** 1139 * 返回第 n 个字符串。 1140 */ 1141 public static QueryColumn elt(QueryColumn columnN, QueryColumn columnS1, QueryColumn... columnSn) { 1142 return new FunctionQueryColumn(ELT, ArrayUtil.concat(new QueryColumn[]{columnN, columnS1}, columnSn)); 1143 } 1144 1145 /** 1146 * 返回第一个与字符串 s 匹配的字符串的位置。 1147 */ 1148 public static QueryColumn field(String columnS, String columnS1, String... columnSn) { 1149 return new FunctionQueryColumn(FIELD, ArrayUtil.concat(new String[]{columnS, columnS1}, columnSn)); 1150 } 1151 1152 /** 1153 * 返回第一个与字符串 s 匹配的字符串的位置。 1154 */ 1155 public static QueryColumn field(QueryColumn columnS, QueryColumn columnS1, QueryColumn... columnSn) { 1156 return new FunctionQueryColumn(FIELD, ArrayUtil.concat(new QueryColumn[]{columnS, columnS1}, columnSn)); 1157 } 1158 1159 /** 1160 * 返回在字符串 s2 中与 s1 匹配的字符串的位置。 1161 */ 1162 public static QueryColumn findInSet(String columnS1, String columnS2) { 1163 return new FunctionQueryColumn(FIND_IN_SET, columnS1, columnS2); 1164 } 1165 1166 /** 1167 * 返回在字符串 s2 中与 s1 匹配的字符串的位置。 1168 */ 1169 public static QueryColumn findInSet(QueryColumn columnS1, QueryColumn columnS2) { 1170 return new FunctionQueryColumn(FIND_IN_SET, columnS1, columnS2); 1171 } 1172 1173 /** 1174 * 返回在字符串 s2 中与 s1 匹配的字符串的位置。 1175 */ 1176 public static <S1, S2> QueryColumn findInSet(LambdaGetter<S1> columnS1, LambdaGetter<S2> columnS2) { 1177 return new FunctionQueryColumn(FIND_IN_SET, LambdaUtil.getQueryColumn(columnS1), LambdaUtil.getQueryColumn(columnS2)); 1178 } 1179 1180 // === 日期时间函数 === 1181 1182 /** 1183 * 返回当前日期。 1184 */ 1185 public static QueryColumn curDate() { 1186 return new FunctionQueryColumn(CURDATE); 1187 } 1188 1189 /** 1190 * 返回当前日期。 1191 */ 1192 public static QueryColumn currentDate() { 1193 return new FunctionQueryColumn(CURRENT_DATE); 1194 } 1195 1196 /** 1197 * 返回当前时间。 1198 */ 1199 public static QueryColumn curTime() { 1200 return new FunctionQueryColumn(CURTIME); 1201 } 1202 1203 /** 1204 * 返回当前时间。 1205 */ 1206 public static QueryColumn currentTime() { 1207 return new FunctionQueryColumn(CURRENT_TIME); 1208 } 1209 1210 /** 1211 * 返回当前日期和时间。 1212 */ 1213 public static QueryColumn now() { 1214 return new FunctionQueryColumn(NOW); 1215 } 1216 1217 /** 1218 * 返回当前日期和时间。 1219 */ 1220 public static QueryColumn currentTimestamp() { 1221 return new FunctionQueryColumn(CURRENT_TIMESTAMP); 1222 } 1223 1224 /** 1225 * 返回当前日期和时间。 1226 */ 1227 public static QueryColumn localTime() { 1228 return new FunctionQueryColumn(LOCALTIME); 1229 } 1230 1231 /** 1232 * 返回当前日期和时间。 1233 */ 1234 public static QueryColumn sysDate() { 1235 return new FunctionQueryColumn(SYSDATE); 1236 } 1237 1238 1239 /** 1240 * 返回当前日期和时间。 1241 */ 1242 public static QueryColumn localTimestamp() { 1243 return new FunctionQueryColumn(LOCALTIMESTAMP); 1244 } 1245 1246 /** 1247 * 以 UNIX 时间戳的形式返回当前时间。 1248 */ 1249 public static QueryColumn unixTimestamp() { 1250 return new FunctionQueryColumn(UNIX_TIMESTAMP); 1251 } 1252 1253 /** 1254 * 将时间 d 以 UNIX 时间戳的形式返回。 1255 */ 1256 public static QueryColumn unixTimestamp(String columnD) { 1257 return new FunctionQueryColumn(UNIX_TIMESTAMP, columnD); 1258 } 1259 1260 /** 1261 * 将时间 d 以 UNIX 时间戳的形式返回。 1262 */ 1263 public static QueryColumn unixTimestamp(QueryColumn columnD) { 1264 return new FunctionQueryColumn(UNIX_TIMESTAMP, columnD); 1265 } 1266 1267 /** 1268 * 将时间 d 以 UNIX 时间戳的形式返回。 1269 */ 1270 public static <T> QueryColumn unixTimestamp(LambdaGetter<T> columnD) { 1271 return new FunctionQueryColumn(UNIX_TIMESTAMP, LambdaUtil.getQueryColumn(columnD)); 1272 } 1273 1274 /** 1275 * 把 UNIX 时间戳的时间转换为普通格式的时间。 1276 */ 1277 public static QueryColumn fromUnixTime(String columnD) { 1278 return new FunctionQueryColumn(FROM_UNIXTIME, columnD); 1279 } 1280 1281 /** 1282 * 把 UNIX 时间戳的时间转换为普通格式的时间。 1283 */ 1284 public static QueryColumn fromUnixTime(QueryColumn columnD) { 1285 return new FunctionQueryColumn(FROM_UNIXTIME, columnD); 1286 } 1287 1288 /** 1289 * 把 UNIX 时间戳的时间转换为普通格式的时间。 1290 */ 1291 public static <T> QueryColumn fromUnixTime(LambdaGetter<T> columnD) { 1292 return new FunctionQueryColumn(FROM_UNIXTIME, LambdaUtil.getQueryColumn(columnD)); 1293 } 1294 1295 /** 1296 * 返回 UTC(国际协调时间)日期。 1297 */ 1298 public static QueryColumn utcDate() { 1299 return new FunctionQueryColumn(UTC_DATE); 1300 } 1301 1302 /** 1303 * 返回 UTC 时间。 1304 */ 1305 public static QueryColumn utcTime() { 1306 return new FunctionQueryColumn(UTC_TIME); 1307 } 1308 1309 /** 1310 * 返回日期 d 中的月份值,范围是 1~12。 1311 */ 1312 public static QueryColumn month(String columnD) { 1313 return new FunctionQueryColumn(MONTH, columnD); 1314 } 1315 1316 /** 1317 * 返回日期 d 中的月份值,范围是 1~12。 1318 */ 1319 public static QueryColumn month(QueryColumn columnD) { 1320 return new FunctionQueryColumn(MONTH, columnD); 1321 } 1322 1323 /** 1324 * 返回日期 d 中的月份值,范围是 1~12。 1325 */ 1326 public static <T> QueryColumn month(LambdaGetter<T> columnD) { 1327 return new FunctionQueryColumn(MONTH, LambdaUtil.getQueryColumn(columnD)); 1328 } 1329 1330 /** 1331 * 返回日期 d 中的月份名称,如 january。 1332 */ 1333 public static QueryColumn monthName(String columnD) { 1334 return new FunctionQueryColumn(MONTHNAME, columnD); 1335 } 1336 1337 /** 1338 * 返回日期 d 中的月份名称,如 january。 1339 */ 1340 public static QueryColumn monthName(QueryColumn columnD) { 1341 return new FunctionQueryColumn(MONTHNAME, columnD); 1342 } 1343 1344 /** 1345 * 返回日期 d 中的月份名称,如 january。 1346 */ 1347 public static <T> QueryColumn monthName(LambdaGetter<T> columnD) { 1348 return new FunctionQueryColumn(MONTHNAME, LambdaUtil.getQueryColumn(columnD)); 1349 } 1350 1351 /** 1352 * 返回日期 d 是星期几,如 Monday。 1353 */ 1354 public static QueryColumn dayName(String columnD) { 1355 return new FunctionQueryColumn(DAYNAME, columnD); 1356 } 1357 1358 /** 1359 * 返回日期 d 是星期几,如 Monday。 1360 */ 1361 public static QueryColumn dayName(QueryColumn columnD) { 1362 return new FunctionQueryColumn(DAYNAME, columnD); 1363 } 1364 1365 /** 1366 * 返回日期 d 是星期几,如 Monday。 1367 */ 1368 public static <T> QueryColumn dayName(LambdaGetter<T> columnD) { 1369 return new FunctionQueryColumn(DAYNAME, LambdaUtil.getQueryColumn(columnD)); 1370 } 1371 1372 /** 1373 * 返回日期 d 是星期几,1 表示星期日,2 表示星期二。 1374 */ 1375 public static QueryColumn dayOfWeek(String columnD) { 1376 return new FunctionQueryColumn(DAYOFWEEK, columnD); 1377 } 1378 1379 /** 1380 * 返回日期 d 是星期几,1 表示星期日,2 表示星期二。 1381 */ 1382 public static QueryColumn dayOfWeek(QueryColumn columnD) { 1383 return new FunctionQueryColumn(DAYOFWEEK, columnD); 1384 } 1385 1386 /** 1387 * 返回日期 d 是星期几,1 表示星期日,2 表示星期二。 1388 */ 1389 public static <T> QueryColumn dayOfWeek(LambdaGetter<T> columnD) { 1390 return new FunctionQueryColumn(DAYOFWEEK, LambdaUtil.getQueryColumn(columnD)); 1391 } 1392 1393 /** 1394 * 返回日期 d 是星期几,0 表示星期一,1 表示星期二。 1395 */ 1396 public static QueryColumn weekday(String columnD) { 1397 return new FunctionQueryColumn(WEEKDAY, columnD); 1398 } 1399 1400 /** 1401 * 返回日期 d 是星期几,0 表示星期一,1 表示星期二。 1402 */ 1403 public static QueryColumn weekday(QueryColumn columnD) { 1404 return new FunctionQueryColumn(WEEKDAY, columnD); 1405 } 1406 1407 /** 1408 * 返回日期 d 是星期几,0 表示星期一,1 表示星期二。 1409 */ 1410 public static <T> QueryColumn weekday(LambdaGetter<T> columnD) { 1411 return new FunctionQueryColumn(WEEKDAY, LambdaUtil.getQueryColumn(columnD)); 1412 } 1413 1414 /** 1415 * 计算日期 d 是本年的第几个星期,范围是 0-53。 1416 */ 1417 public static QueryColumn week(String columnD) { 1418 return new FunctionQueryColumn(WEEK, columnD); 1419 } 1420 1421 /** 1422 * 计算日期 d 是本年的第几个星期,范围是 0-53。 1423 */ 1424 public static QueryColumn week(QueryColumn columnD) { 1425 return new FunctionQueryColumn(WEEK, columnD); 1426 } 1427 1428 /** 1429 * 计算日期 d 是本年的第几个星期,范围是 0-53。 1430 */ 1431 public static <T> QueryColumn week(LambdaGetter<T> columnD) { 1432 return new FunctionQueryColumn(WEEK, LambdaUtil.getQueryColumn(columnD)); 1433 } 1434 1435 /** 1436 * 计算日期 d 是本年的第几个星期,范围是 1-53。 1437 */ 1438 public static QueryColumn weekOfYear(String columnD) { 1439 return new FunctionQueryColumn(WEEKOFYEAR, columnD); 1440 } 1441 1442 /** 1443 * 计算日期 d 是本年的第几个星期,范围是 1-53。 1444 */ 1445 public static QueryColumn weekOfYear(QueryColumn columnD) { 1446 return new FunctionQueryColumn(WEEKOFYEAR, columnD); 1447 } 1448 1449 /** 1450 * 计算日期 d 是本年的第几个星期,范围是 1-53。 1451 */ 1452 public static <T> QueryColumn weekOfYear(LambdaGetter<T> columnD) { 1453 return new FunctionQueryColumn(WEEKOFYEAR, LambdaUtil.getQueryColumn(columnD)); 1454 } 1455 1456 /** 1457 * 计算日期 d 是本年的第几天。 1458 */ 1459 public static QueryColumn dayOfYear(String columnD) { 1460 return new FunctionQueryColumn(DAYOFYEAR, columnD); 1461 } 1462 1463 /** 1464 * 计算日期 d 是本年的第几天。 1465 */ 1466 public static QueryColumn dayOfYear(QueryColumn columnD) { 1467 return new FunctionQueryColumn(DAYOFYEAR, columnD); 1468 } 1469 1470 /** 1471 * 计算日期 d 是本年的第几天。 1472 */ 1473 public static <T> QueryColumn dayOfYear(LambdaGetter<T> columnD) { 1474 return new FunctionQueryColumn(DAYOFYEAR, LambdaUtil.getQueryColumn(columnD)); 1475 } 1476 1477 /** 1478 * 计算日期 d 是本月的第几天。 1479 */ 1480 public static QueryColumn dayOfMonth(String columnD) { 1481 return new FunctionQueryColumn(DAYOFMONTH, columnD); 1482 } 1483 1484 /** 1485 * 计算日期 d 是本月的第几天。 1486 */ 1487 public static QueryColumn dayOfMonth(QueryColumn columnD) { 1488 return new FunctionQueryColumn(DAYOFMONTH, columnD); 1489 } 1490 1491 /** 1492 * 计算日期 d 是本月的第几天。 1493 */ 1494 public static <T> QueryColumn dayOfMonth(LambdaGetter<T> columnD) { 1495 return new FunctionQueryColumn(DAYOFMONTH, LambdaUtil.getQueryColumn(columnD)); 1496 } 1497 1498 /** 1499 * 返回日期 d 中的年份值。 1500 */ 1501 public static QueryColumn year(String columnD) { 1502 return new FunctionQueryColumn(YEAR, columnD); 1503 } 1504 1505 /** 1506 * 返回日期 d 中的年份值。 1507 */ 1508 public static QueryColumn year(QueryColumn columnD) { 1509 return new FunctionQueryColumn(YEAR, columnD); 1510 } 1511 1512 /** 1513 * 返回日期 d 中的年份值。 1514 */ 1515 public static <T> QueryColumn year(LambdaGetter<T> columnD) { 1516 return new FunctionQueryColumn(YEAR, LambdaUtil.getQueryColumn(columnD)); 1517 } 1518 1519 /** 1520 * 返回日期 d 中的天数值。 1521 */ 1522 public static FunctionQueryColumn day(String columnD) { 1523 return new FunctionQueryColumn(DAY, columnD); 1524 } 1525 1526 /** 1527 * 返回日期 d 中的天数值。 1528 */ 1529 public static FunctionQueryColumn day(QueryColumn columnD) { 1530 return new FunctionQueryColumn(DAY, columnD); 1531 } 1532 1533 /** 1534 * 返回日期 d 中的天数值。 1535 */ 1536 public static <T> FunctionQueryColumn day(LambdaGetter<T> columnD) { 1537 return new FunctionQueryColumn(DAY, LambdaUtil.getQueryColumn(columnD)); 1538 } 1539 1540 /** 1541 * 返回日期 d 是第几季度,范围 1-4。 1542 */ 1543 public static QueryColumn quarter(String columnD) { 1544 return new FunctionQueryColumn(QUARTER, columnD); 1545 } 1546 1547 /** 1548 * 返回日期 d 是第几季度,范围 1-4。 1549 */ 1550 public static QueryColumn quarter(QueryColumn columnD) { 1551 return new FunctionQueryColumn(QUARTER, columnD); 1552 } 1553 1554 /** 1555 * 返回日期 d 是第几季度,范围 1-4。 1556 */ 1557 public static <T> QueryColumn quarter(LambdaGetter<T> columnD) { 1558 return new FunctionQueryColumn(QUARTER, LambdaUtil.getQueryColumn(columnD)); 1559 } 1560 1561 /** 1562 * 返回时间 t 中的小时值。 1563 */ 1564 public static QueryColumn hour(String columnT) { 1565 return new FunctionQueryColumn(HOUR, columnT); 1566 } 1567 1568 /** 1569 * 返回时间 t 中的小时值。 1570 */ 1571 public static QueryColumn hour(QueryColumn columnT) { 1572 return new FunctionQueryColumn(HOUR, columnT); 1573 } 1574 1575 /** 1576 * 返回时间 t 中的小时值。 1577 */ 1578 public static <T> QueryColumn hour(LambdaGetter<T> columnT) { 1579 return new FunctionQueryColumn(HOUR, LambdaUtil.getQueryColumn(columnT)); 1580 } 1581 1582 /** 1583 * 返回时间 t 中的分钟值。 1584 */ 1585 public static QueryColumn minute(String columnT) { 1586 return new FunctionQueryColumn(MINUTE, columnT); 1587 } 1588 1589 /** 1590 * 返回时间 t 中的分钟值。 1591 */ 1592 public static QueryColumn minute(QueryColumn columnT) { 1593 return new FunctionQueryColumn(MINUTE, columnT); 1594 } 1595 1596 /** 1597 * 返回时间 t 中的分钟值。 1598 */ 1599 public static <T> QueryColumn minute(LambdaGetter<T> columnT) { 1600 return new FunctionQueryColumn(MINUTE, LambdaUtil.getQueryColumn(columnT)); 1601 } 1602 1603 /** 1604 * 返回时间 t 中的秒钟值。 1605 */ 1606 public static QueryColumn second(String columnT) { 1607 return new FunctionQueryColumn(SECOND, columnT); 1608 } 1609 1610 /** 1611 * 返回时间 t 中的秒钟值。 1612 */ 1613 public static QueryColumn second(QueryColumn columnT) { 1614 return new FunctionQueryColumn(SECOND, columnT); 1615 } 1616 1617 /** 1618 * 返回时间 t 中的秒钟值。 1619 */ 1620 public static <T> QueryColumn second(LambdaGetter<T> columnT) { 1621 return new FunctionQueryColumn(SECOND, LambdaUtil.getQueryColumn(columnT)); 1622 } 1623 1624 /** 1625 * 将时间 t 转换为秒。 1626 */ 1627 public static QueryColumn timeToSec(String columnT) { 1628 return new FunctionQueryColumn(TIME_TO_SEC, columnT); 1629 } 1630 1631 /** 1632 * 将时间 t 转换为秒。 1633 */ 1634 public static QueryColumn timeToSec(QueryColumn columnT) { 1635 return new FunctionQueryColumn(TIME_TO_SEC, columnT); 1636 } 1637 1638 /** 1639 * 将时间 t 转换为秒。 1640 */ 1641 public static <T> QueryColumn timeToSec(LambdaGetter<T> columnT) { 1642 return new FunctionQueryColumn(TIME_TO_SEC, LambdaUtil.getQueryColumn(columnT)); 1643 } 1644 1645 /** 1646 * 将以秒为单位的时间 s 转换为时分秒的格式。 1647 */ 1648 public static QueryColumn secToTime(String columnS) { 1649 return new FunctionQueryColumn(SEC_TO_TIME, columnS); 1650 } 1651 1652 /** 1653 * 将以秒为单位的时间 s 转换为时分秒的格式。 1654 */ 1655 public static QueryColumn secToTime(QueryColumn columnS) { 1656 return new FunctionQueryColumn(SEC_TO_TIME, columnS); 1657 } 1658 1659 /** 1660 * 将以秒为单位的时间 s 转换为时分秒的格式。 1661 */ 1662 public static <T> QueryColumn secToTime(LambdaGetter<T> columnS) { 1663 return new FunctionQueryColumn(SEC_TO_TIME, LambdaUtil.getQueryColumn(columnS)); 1664 } 1665 1666 /** 1667 * 计算日期 d 到 0000 年 1 月 1 日的天数。 1668 */ 1669 public static QueryColumn toDays(String columnD) { 1670 return new FunctionQueryColumn(TO_DAYS, columnD); 1671 } 1672 1673 /** 1674 * 计算日期 d 到 0000 年 1 月 1 日的天数。 1675 */ 1676 public static QueryColumn toDays(QueryColumn columnD) { 1677 return new FunctionQueryColumn(TO_DAYS, columnD); 1678 } 1679 1680 /** 1681 * 计算日期 d 到 0000 年 1 月 1 日的天数。 1682 */ 1683 public static <T> QueryColumn toDays(LambdaGetter<T> columnD) { 1684 return new FunctionQueryColumn(TO_DAYS, LambdaUtil.getQueryColumn(columnD)); 1685 } 1686 1687 /** 1688 * 计算从 0000 年 1 月 1 日开始 n 天后的日期。 1689 */ 1690 public static QueryColumn fromDays(String columnD) { 1691 return new FunctionQueryColumn(FROM_DAYS, columnD); 1692 } 1693 1694 /** 1695 * 计算从 0000 年 1 月 1 日开始 n 天后的日期。 1696 */ 1697 public static QueryColumn fromDays(QueryColumn columnD) { 1698 return new FunctionQueryColumn(FROM_DAYS, columnD); 1699 } 1700 1701 /** 1702 * 计算从 0000 年 1 月 1 日开始 n 天后的日期。 1703 */ 1704 public static <T> QueryColumn fromDays(LambdaGetter<T> columnD) { 1705 return new FunctionQueryColumn(FROM_DAYS, LambdaUtil.getQueryColumn(columnD)); 1706 } 1707 1708 /** 1709 * 计算日期 d1 到 d2 之间相隔的天数。 1710 */ 1711 public static QueryColumn dateDiff(String columnD1, String columnD2) { 1712 return new FunctionQueryColumn(DATEDIFF, columnD1, columnD2); 1713 } 1714 1715 /** 1716 * 计算日期 d1 到 d2 之间相隔的天数。 1717 */ 1718 public static QueryColumn dateDiff(QueryColumn columnD1, QueryColumn columnD2) { 1719 return new FunctionQueryColumn(DATEDIFF, columnD1, columnD2); 1720 } 1721 1722 /** 1723 * 计算日期 d1 到 d2 之间相隔的天数。 1724 */ 1725 public static <D1, D2> QueryColumn dateDiff(LambdaGetter<D1> columnD1, LambdaGetter<D2> columnD2) { 1726 return new FunctionQueryColumn(DATEDIFF, LambdaUtil.getQueryColumn(columnD1), LambdaUtil.getQueryColumn(columnD2)); 1727 } 1728 1729 /** 1730 * 计算开始日期 d 加上 n 天的日期。 1731 */ 1732 public static QueryColumn addDate(String columnD, String columnN) { 1733 return new FunctionQueryColumn(ADDDATE, columnD, columnN); 1734 } 1735 1736 /** 1737 * 计算开始日期 d 加上 n 天的日期。 1738 */ 1739 public static QueryColumn addDate(QueryColumn columnD, QueryColumn columnN) { 1740 return new FunctionQueryColumn(ADDDATE, columnD, columnN); 1741 } 1742 1743 /** 1744 * 计算开始日期 d 加上 n 天的日期。 1745 */ 1746 public static <D, N> QueryColumn addDate(LambdaGetter<D> columnD, LambdaGetter<N> columnN) { 1747 return new FunctionQueryColumn(ADDDATE, LambdaUtil.getQueryColumn(columnD), LambdaUtil.getQueryColumn(columnN)); 1748 } 1749 1750 /** 1751 * 计算起始日期 d 减去 n 天的日期。 1752 */ 1753 public static QueryColumn subDate(String columnD, String columnN) { 1754 return new FunctionQueryColumn(SUBDATE, columnD, columnN); 1755 } 1756 1757 /** 1758 * 计算起始日期 d 减去 n 天的日期。 1759 */ 1760 public static QueryColumn subDate(QueryColumn columnD, QueryColumn columnN) { 1761 return new FunctionQueryColumn(SUBDATE, columnD, columnN); 1762 } 1763 1764 /** 1765 * 计算起始日期 d 减去 n 天的日期。 1766 */ 1767 public static <D, N> QueryColumn subDate(LambdaGetter<D> columnD, LambdaGetter<N> columnN) { 1768 return new FunctionQueryColumn(SUBDATE, LambdaUtil.getQueryColumn(columnD), LambdaUtil.getQueryColumn(columnN)); 1769 } 1770 1771 /** 1772 * 计算起始时间 t 加上 n 秒的时间。 1773 */ 1774 public static QueryColumn addTime(String columnT, String columnN) { 1775 return new FunctionQueryColumn(ADDTIME, columnT, columnN); 1776 } 1777 1778 /** 1779 * 计算起始时间 t 加上 n 秒的时间。 1780 */ 1781 public static QueryColumn addTime(QueryColumn columnT, QueryColumn columnN) { 1782 return new FunctionQueryColumn(ADDTIME, columnT, columnN); 1783 } 1784 1785 /** 1786 * 计算起始时间 t 加上 n 秒的时间。 1787 */ 1788 public static <T, N> QueryColumn addTime(LambdaGetter<T> columnT, LambdaGetter<N> columnN) { 1789 return new FunctionQueryColumn(ADDTIME, LambdaUtil.getQueryColumn(columnT), LambdaUtil.getQueryColumn(columnN)); 1790 } 1791 1792 /** 1793 * 计算起始时间 t 减去 n 秒的时间。 1794 */ 1795 public static QueryColumn subTime(String columnT, String columnN) { 1796 return new FunctionQueryColumn(SUBTIME, columnT, columnN); 1797 } 1798 1799 /** 1800 * 计算起始时间 t 减去 n 秒的时间。 1801 */ 1802 public static QueryColumn subTime(QueryColumn columnT, QueryColumn columnN) { 1803 return new FunctionQueryColumn(SUBTIME, columnT, columnN); 1804 } 1805 1806 /** 1807 * 计算起始时间 t 减去 n 秒的时间。 1808 */ 1809 public static <T, N> QueryColumn subTime(LambdaGetter<T> columnT, LambdaGetter<N> columnN) { 1810 return new FunctionQueryColumn(SUBTIME, LambdaUtil.getQueryColumn(columnT), LambdaUtil.getQueryColumn(columnN)); 1811 } 1812 1813 /** 1814 * 按照表达式 f 的要求显示日期 d。 1815 */ 1816 public static QueryColumn dateFormat(String columnD, String format) { 1817 return new FunctionQueryColumn(DATE_FORMAT, string(columnD), string(format)); 1818 } 1819 1820 /** 1821 * 按照表达式 f 的要求显示日期 d。 1822 */ 1823 public static QueryColumn dateFormat(QueryColumn columnD, String format) { 1824 return new FunctionQueryColumn(DATE_FORMAT, columnD, string(format)); 1825 } 1826 1827 /** 1828 * 按照表达式 f 的要求显示日期 d。 1829 */ 1830 public static <D, F> QueryColumn dateFormat(LambdaGetter<D> columnD, String format) { 1831 return new FunctionQueryColumn(DATE_FORMAT, LambdaUtil.getQueryColumn(columnD), string(format)); 1832 } 1833 1834 /** 1835 * 按照表达式 f 的要求显示时间 t。 1836 */ 1837 public static QueryColumn timeFormat(String columnT, String columnF) { 1838 return new FunctionQueryColumn(TIME_FORMAT, columnT, columnF); 1839 } 1840 1841 /** 1842 * 按照表达式 f 的要求显示时间 t。 1843 */ 1844 public static QueryColumn timeFormat(QueryColumn columnT, QueryColumn columnF) { 1845 return new FunctionQueryColumn(TIME_FORMAT, columnT, columnF); 1846 } 1847 1848 /** 1849 * 按照表达式 f 的要求显示时间 t。 1850 */ 1851 public static <T, F> QueryColumn timeFormat(LambdaGetter<T> columnT, LambdaGetter<F> columnF) { 1852 return new FunctionQueryColumn(TIME_FORMAT, LambdaUtil.getQueryColumn(columnT), LambdaUtil.getQueryColumn(columnF)); 1853 } 1854 1855 /** 1856 * 根据字符串 s 获取 type 类型数据的显示格式。 1857 */ 1858 public static QueryColumn getFormat(String columnType, String columnS) { 1859 return new FunctionQueryColumn(GET_FORMAT, columnType, columnS); 1860 } 1861 1862 /** 1863 * 根据字符串 s 获取 type 类型数据的显示格式。 1864 */ 1865 public static QueryColumn getFormat(QueryColumn columnType, QueryColumn columnS) { 1866 return new FunctionQueryColumn(GET_FORMAT, columnType, columnS); 1867 } 1868 1869 /** 1870 * 根据字符串 s 获取 type 类型数据的显示格式。 1871 */ 1872 public static <T, S> QueryColumn getFormat(LambdaGetter<T> columnType, LambdaGetter<S> columnS) { 1873 return new FunctionQueryColumn(GET_FORMAT, LambdaUtil.getQueryColumn(columnType), LambdaUtil.getQueryColumn(columnS)); 1874 } 1875 1876 // === 系统信息函数 === 1877 1878 /** 1879 * 返回数据库的版本号。 1880 */ 1881 public static QueryColumn version() { 1882 return new FunctionQueryColumn(VERSION); 1883 } 1884 1885 /** 1886 * 返回服务器的连接数。 1887 */ 1888 public static QueryColumn connectionId() { 1889 return new FunctionQueryColumn(CONNECTION_ID); 1890 } 1891 1892 /** 1893 * 返回当前数据库名。 1894 */ 1895 public static QueryColumn database() { 1896 return new FunctionQueryColumn(DATABASE); 1897 } 1898 1899 /** 1900 * 返回当前数据库 schema。 1901 */ 1902 public static QueryColumn schema() { 1903 return new FunctionQueryColumn(SCHEMA); 1904 } 1905 1906 /** 1907 * 返回当前用户的名称。 1908 */ 1909 public static QueryColumn user() { 1910 return new FunctionQueryColumn(USER); 1911 } 1912 1913 /** 1914 * 返回字符串 str 的字符集。 1915 */ 1916 public static QueryColumn charset(String columnStr) { 1917 return new FunctionQueryColumn(CHARSET, columnStr); 1918 } 1919 1920 /** 1921 * 返回字符串 str 的字符集。 1922 */ 1923 public static QueryColumn charset(QueryColumn columnStr) { 1924 return new FunctionQueryColumn(CHARSET, columnStr); 1925 } 1926 1927 /** 1928 * 返回字符串 str 的字符集。 1929 */ 1930 public static <T> QueryColumn charset(LambdaGetter<T> columnStr) { 1931 return new FunctionQueryColumn(CHARSET, LambdaUtil.getQueryColumn(columnStr)); 1932 } 1933 1934 /** 1935 * 返回字符串 str 的字符排列方式。 1936 */ 1937 public static QueryColumn collation(String columnStr) { 1938 return new FunctionQueryColumn(COLLATION, columnStr); 1939 } 1940 1941 /** 1942 * 返回字符串 str 的字符排列方式。 1943 */ 1944 public static QueryColumn collation(QueryColumn columnStr) { 1945 return new FunctionQueryColumn(COLLATION, columnStr); 1946 } 1947 1948 /** 1949 * 返回字符串 str 的字符排列方式。 1950 */ 1951 public static <T> QueryColumn collation(LambdaGetter<T> columnStr) { 1952 return new FunctionQueryColumn(COLLATION, LambdaUtil.getQueryColumn(columnStr)); 1953 } 1954 1955 /** 1956 * 返回最后生成的 auto_increment 值。 1957 */ 1958 public static QueryColumn lastInsertId() { 1959 return new FunctionQueryColumn(LAST_INSERT_ID); 1960 } 1961 1962 // === 加密函数 === 1963 1964 /** 1965 * 对字符串 str 进行加密。 1966 */ 1967 public static QueryColumn password(String columnStr) { 1968 return new FunctionQueryColumn(PASSWORD, columnStr); 1969 } 1970 1971 /** 1972 * 对字符串 str 进行加密。 1973 */ 1974 public static QueryColumn password(QueryColumn columnStr) { 1975 return new FunctionQueryColumn(PASSWORD, columnStr); 1976 } 1977 1978 /** 1979 * 对字符串 str 进行加密。 1980 */ 1981 public static <T> QueryColumn password(LambdaGetter<T> columnStr) { 1982 return new FunctionQueryColumn(PASSWORD, LambdaUtil.getQueryColumn(columnStr)); 1983 } 1984 1985 /** 1986 * 对字符串 str 进行加密。 1987 */ 1988 public static QueryColumn md5(String columnStr) { 1989 return new FunctionQueryColumn(MD5, columnStr); 1990 } 1991 1992 /** 1993 * 对字符串 str 进行加密。 1994 */ 1995 public static QueryColumn md5(QueryColumn columnStr) { 1996 return new FunctionQueryColumn(MD5, columnStr); 1997 } 1998 1999 /** 2000 * 对字符串 str 进行加密。 2001 */ 2002 public static <T> QueryColumn md5(LambdaGetter<T> columnStr) { 2003 return new FunctionQueryColumn(MD5, LambdaUtil.getQueryColumn(columnStr)); 2004 } 2005 2006 /** 2007 * 使用字符串 pswd_str 来加密字符串 str,加密结果是一个二进制数,必须使用 BLOB 类型来保持它。 2008 */ 2009 public static QueryColumn encode(String columnStr, String columnPswdStr) { 2010 return new FunctionQueryColumn(ENCODE, columnStr, columnPswdStr); 2011 } 2012 2013 /** 2014 * 使用字符串 pswd_str 来加密字符串 str,加密结果是一个二进制数,必须使用 BLOB 类型来保持它。 2015 */ 2016 public static QueryColumn encode(QueryColumn columnStr, QueryColumn columnPswdStr) { 2017 return new FunctionQueryColumn(ENCODE, columnStr, columnPswdStr); 2018 } 2019 2020 /** 2021 * 使用字符串 pswd_str 来加密字符串 str,加密结果是一个二进制数,必须使用 BLOB 类型来保持它。 2022 */ 2023 public static <S, P> QueryColumn encode(LambdaGetter<S> columnStr, LambdaGetter<P> columnPswdStr) { 2024 return new FunctionQueryColumn(ENCODE, LambdaUtil.getQueryColumn(columnStr), LambdaUtil.getQueryColumn(columnPswdStr)); 2025 } 2026 2027 /** 2028 * 解密函数,使用字符串 pswd_str 来为 crypt_str 解密。 2029 */ 2030 public static QueryColumn decode(String columnCryptStr, String columnPswdStr) { 2031 return new FunctionQueryColumn(DECODE, columnCryptStr, columnPswdStr); 2032 } 2033 2034 /** 2035 * 解密函数,使用字符串 pswd_str 来为 crypt_str 解密。 2036 */ 2037 public static QueryColumn decode(QueryColumn columnCryptStr, QueryColumn columnPswdStr) { 2038 return new FunctionQueryColumn(DECODE, columnCryptStr, columnPswdStr); 2039 } 2040 2041 /** 2042 * 解密函数,使用字符串 pswd_str 来为 crypt_str 解密。 2043 */ 2044 public static <C, P> QueryColumn decode(LambdaGetter<C> columnCryptStr, LambdaGetter<P> columnPswdStr) { 2045 return new FunctionQueryColumn(DECODE, LambdaUtil.getQueryColumn(columnCryptStr), LambdaUtil.getQueryColumn(columnPswdStr)); 2046 } 2047 2048 // === 其他函数 === 2049 2050 /** 2051 * 格式化函数,可以将数字 x 进行格式化,将 x 保留到小数点后 n 位,这个过程需要进行四舍五入。 2052 */ 2053 public static QueryColumn format(String columnX, String columnN) { 2054 return new FunctionQueryColumn(FORMAT, columnX, columnN); 2055 } 2056 2057 /** 2058 * 格式化函数,可以将数字 x 进行格式化,将 x 保留到小数点后 n 位,这个过程需要进行四舍五入。 2059 */ 2060 public static QueryColumn format(QueryColumn columnX, QueryColumn columnN) { 2061 return new FunctionQueryColumn(FORMAT, columnX, columnN); 2062 } 2063 2064 /** 2065 * 格式化函数,可以将数字 x 进行格式化,将 x 保留到小数点后 n 位,这个过程需要进行四舍五入。 2066 */ 2067 public static <X, N> QueryColumn format(LambdaGetter<X> columnX, LambdaGetter<N> columnN) { 2068 return new FunctionQueryColumn(FORMAT, LambdaUtil.getQueryColumn(columnX), LambdaUtil.getQueryColumn(columnN)); 2069 } 2070 2071 /** 2072 * 返回字符串 s 的第一个字符的 ASSCII 码。 2073 */ 2074 public static QueryColumn ascii(String columnS) { 2075 return new FunctionQueryColumn(ASCII, columnS); 2076 } 2077 2078 /** 2079 * 返回字符串 s 的第一个字符的 ASSCII 码。 2080 */ 2081 public static QueryColumn ascii(QueryColumn columnS) { 2082 return new FunctionQueryColumn(ASCII, columnS); 2083 } 2084 2085 /** 2086 * 返回字符串 s 的第一个字符的 ASSCII 码。 2087 */ 2088 public static <T> QueryColumn ascii(LambdaGetter<T> columnS) { 2089 return new FunctionQueryColumn(ASCII, LambdaUtil.getQueryColumn(columnS)); 2090 } 2091 2092 /** 2093 * 返回 x 的二进制编码。 2094 */ 2095 public static QueryColumn bin(String columnX) { 2096 return new FunctionQueryColumn(BIN, columnX); 2097 } 2098 2099 /** 2100 * 返回 x 的二进制编码。 2101 */ 2102 public static QueryColumn bin(QueryColumn columnX) { 2103 return new FunctionQueryColumn(BIN, columnX); 2104 } 2105 2106 /** 2107 * 返回 x 的二进制编码。 2108 */ 2109 public static <T> QueryColumn bin(LambdaGetter<T> columnX) { 2110 return new FunctionQueryColumn(BIN, LambdaUtil.getQueryColumn(columnX)); 2111 } 2112 2113 /** 2114 * 返回 x 的十六进制编码。 2115 */ 2116 public static QueryColumn hex(String columnX) { 2117 return new FunctionQueryColumn(HEX, columnX); 2118 } 2119 2120 /** 2121 * 返回 x 的十六进制编码。 2122 */ 2123 public static QueryColumn hex(QueryColumn columnX) { 2124 return new FunctionQueryColumn(HEX, columnX); 2125 } 2126 2127 /** 2128 * 返回 x 的十六进制编码。 2129 */ 2130 public static <T> QueryColumn hex(LambdaGetter<T> columnX) { 2131 return new FunctionQueryColumn(HEX, LambdaUtil.getQueryColumn(columnX)); 2132 } 2133 2134 /** 2135 * 返回 x 的八进制编码。 2136 */ 2137 public static QueryColumn oct(String columnX) { 2138 return new FunctionQueryColumn(OCT, columnX); 2139 } 2140 2141 /** 2142 * 返回 x 的八进制编码。 2143 */ 2144 public static QueryColumn oct(QueryColumn columnX) { 2145 return new FunctionQueryColumn(OCT, columnX); 2146 } 2147 2148 /** 2149 * 返回 x 的八进制编码。 2150 */ 2151 public static <T> QueryColumn oct(LambdaGetter<T> columnX) { 2152 return new FunctionQueryColumn(OCT, LambdaUtil.getQueryColumn(columnX)); 2153 } 2154 2155 /** 2156 * 将 x 从 f1 进制数变成 f2 进制数。 2157 */ 2158 public static QueryColumn conv(String columnX, String columnF1, String columnF2) { 2159 return new FunctionQueryColumn(CONV, columnX, columnF1, columnF2); 2160 } 2161 2162 /** 2163 * 将 x 从 f1 进制数变成 f2 进制数。 2164 */ 2165 public static QueryColumn conv(QueryColumn columnX, QueryColumn columnF1, QueryColumn columnF2) { 2166 return new FunctionQueryColumn(CONV, columnX, columnF1, columnF2); 2167 } 2168 2169 /** 2170 * 将 x 从 f1 进制数变成 f2 进制数。 2171 */ 2172 public static <X, F1, F2> QueryColumn conv(LambdaGetter<X> columnX, LambdaGetter<F1> columnF1, LambdaGetter<F2> columnF2) { 2173 return new FunctionQueryColumn(CONV, LambdaUtil.getQueryColumn(columnX), LambdaUtil.getQueryColumn(columnF1), LambdaUtil.getQueryColumn(columnF2)); 2174 } 2175 2176 /** 2177 * 将 IP 地址转换为数字表示,IP 值需要加上引号。 2178 */ 2179 public static QueryColumn inetAton(String columnIP) { 2180 return new FunctionQueryColumn(INET_ATON, columnIP); 2181 } 2182 2183 /** 2184 * 将 IP 地址转换为数字表示,IP 值需要加上引号。 2185 */ 2186 public static QueryColumn inetAton(QueryColumn columnIP) { 2187 return new FunctionQueryColumn(INET_ATON, columnIP); 2188 } 2189 2190 /** 2191 * 将 IP 地址转换为数字表示,IP 值需要加上引号。 2192 */ 2193 public static <T> QueryColumn inetAton(LambdaGetter<T> columnIP) { 2194 return new FunctionQueryColumn(INET_ATON, LambdaUtil.getQueryColumn(columnIP)); 2195 } 2196 2197 /** 2198 * 可以将数字 n 转换成 IP 的形式。 2199 */ 2200 public static QueryColumn inetNtoa(String columnN) { 2201 return new FunctionQueryColumn(INET_NTOA, columnN); 2202 } 2203 2204 /** 2205 * 可以将数字 n 转换成 IP 的形式。 2206 */ 2207 public static QueryColumn inetNtoa(QueryColumn columnN) { 2208 return new FunctionQueryColumn(INET_NTOA, columnN); 2209 } 2210 2211 /** 2212 * 可以将数字 n 转换成 IP 的形式。 2213 */ 2214 public static <T> QueryColumn inetNtoa(LambdaGetter<T> columnN) { 2215 return new FunctionQueryColumn(INET_NTOA, LambdaUtil.getQueryColumn(columnN)); 2216 } 2217 2218 // === 聚合函数 === 2219 2220 /** 2221 * 返回指定列的最大值。 2222 */ 2223 public static FunctionQueryColumn max(String column) { 2224 return new FunctionQueryColumn(MAX, column); 2225 } 2226 2227 /** 2228 * 返回指定列的最大值。 2229 */ 2230 public static FunctionQueryColumn max(QueryColumn column) { 2231 return new FunctionQueryColumn(MAX, column); 2232 } 2233 2234 /** 2235 * 返回指定列的最大值。 2236 */ 2237 public static <T> FunctionQueryColumn max(LambdaGetter<T> column) { 2238 return new FunctionQueryColumn(MAX, LambdaUtil.getQueryColumn(column)); 2239 } 2240 2241 /** 2242 * 返回指定列的最小值。 2243 */ 2244 public static FunctionQueryColumn min(String column) { 2245 return new FunctionQueryColumn(MIN, column); 2246 } 2247 2248 /** 2249 * 返回指定列的最小值。 2250 */ 2251 public static FunctionQueryColumn min(QueryColumn column) { 2252 return new FunctionQueryColumn(MIN, column); 2253 } 2254 2255 /** 2256 * 返回指定列的最小值。 2257 */ 2258 public static <T> FunctionQueryColumn min(LambdaGetter<T> column) { 2259 return new FunctionQueryColumn(MIN, LambdaUtil.getQueryColumn(column)); 2260 } 2261 2262 /** 2263 * 返回指定列的平均值。 2264 */ 2265 public static FunctionQueryColumn avg(String column) { 2266 return new FunctionQueryColumn(AVG, column); 2267 } 2268 2269 /** 2270 * 返回指定列的平均值。 2271 */ 2272 public static FunctionQueryColumn avg(QueryColumn column) { 2273 return new FunctionQueryColumn(AVG, column); 2274 } 2275 2276 /** 2277 * 返回指定列的平均值。 2278 */ 2279 public static <T> FunctionQueryColumn avg(LambdaGetter<T> column) { 2280 return new FunctionQueryColumn(AVG, LambdaUtil.getQueryColumn(column)); 2281 } 2282 2283 /** 2284 * 返回指定字段值的和。 2285 */ 2286 public static FunctionQueryColumn sum(String column) { 2287 return new FunctionQueryColumn(SUM, column); 2288 } 2289 2290 /** 2291 * 返回指定字段值的和。 2292 */ 2293 public static FunctionQueryColumn sum(QueryColumn column) { 2294 return new FunctionQueryColumn(SUM, column); 2295 } 2296 2297 /** 2298 * 返回指定字段值的和。 2299 */ 2300 public static <T> FunctionQueryColumn sum(LambdaGetter<T> column) { 2301 return new FunctionQueryColumn(SUM, LambdaUtil.getQueryColumn(column)); 2302 } 2303 2304 // === COUNT === 2305 2306 /** 2307 * 返回指定列的总行数。 2308 */ 2309 public static FunctionQueryColumn count() { 2310 return new FunctionQueryColumn(COUNT, new RawQueryColumn("*")); 2311 } 2312 2313 /** 2314 * 返回指定列的总行数。 2315 */ 2316 public static FunctionQueryColumn count(String column) { 2317 return new FunctionQueryColumn(COUNT, column); 2318 } 2319 2320 /** 2321 * 返回指定列的总行数。 2322 */ 2323 public static FunctionQueryColumn count(QueryColumn column) { 2324 return new FunctionQueryColumn(COUNT, column); 2325 } 2326 2327 /** 2328 * 返回指定列的总行数。 2329 */ 2330 public static <T> FunctionQueryColumn count(LambdaGetter<T> column) { 2331 return new FunctionQueryColumn(COUNT, LambdaUtil.getQueryColumn(column)); 2332 } 2333 2334 2335 // === DISTINCT === 2336 2337 /** 2338 * 对指定列进行去重。 2339 */ 2340 public static DistinctQueryColumn distinct(QueryColumn... columns) { 2341 return new DistinctQueryColumn(columns); 2342 } 2343 2344 // === CASE THEN ELSE === 2345 2346 /** 2347 * 构建 case then when 语句。 2348 */ 2349 public static CaseQueryColumn.Builder case_() { 2350 return new CaseQueryColumn.Builder(); 2351 } 2352 2353 /** 2354 * 构建 case then when 语句。 2355 */ 2356 public static CaseSearchQueryColumn.Builder case_(QueryColumn column) { 2357 return new CaseSearchQueryColumn.Builder(column); 2358 } 2359 2360 // === CONVERT === 2361 2362 /** 2363 * 将所给类型类型转换为另一种类型。 2364 */ 2365 public static StringFunctionQueryColumn convert(String... params) { 2366 return new StringFunctionQueryColumn(CONVERT, params); 2367 } 2368 2369 // === 构建 column 列 === 2370 2371 /** 2372 * 构建 TRUE 常量。 2373 */ 2374 public static QueryColumn true_() { 2375 return new RawQueryColumn("TRUE"); 2376 } 2377 2378 /** 2379 * 构建 FALSE 常量。 2380 */ 2381 public static QueryColumn false_() { 2382 return new RawQueryColumn("FALSE"); 2383 } 2384 2385 /** 2386 * 构建 NULL 常量。 2387 */ 2388 public static QueryColumn null_() { 2389 return new RawQueryColumn("NULL"); 2390 } 2391 2392 /** 2393 * 构建数字常量。 2394 */ 2395 public static QueryColumn number(Number n) { 2396 return new RawQueryColumn(n); 2397 } 2398 2399 /** 2400 * 构建数字常量。 2401 */ 2402 public static QueryColumn string(String s) { 2403 return new RawQueryColumn("'" + s + "'"); 2404 } 2405 2406 /** 2407 * 构建自定义列。 2408 */ 2409 public static QueryColumn column(String column, Object... params) { 2410 return new RawQueryColumn(column, params); 2411 } 2412 2413 /** 2414 * 构建自定义列。 2415 */ 2416 public static QueryColumn column(String table, String column) { 2417 return new QueryColumn(table, column); 2418 } 2419 2420 /** 2421 * 构建自定义列。 2422 */ 2423 public static QueryColumn column(String schema, String table, String column) { 2424 return new QueryColumn(schema, table, column); 2425 } 2426 2427 /** 2428 * 构建自定义列。 2429 */ 2430 public static <T> QueryColumn column(LambdaGetter<T> column) { 2431 return LambdaUtil.getQueryColumn(column); 2432 } 2433 2434 /** 2435 * 构建自定义列。 2436 */ 2437 public static QueryColumn column(QueryWrapper queryWrapper) { 2438 return new SelectQueryColumn(queryWrapper); 2439 } 2440 2441 // === IF 函数 === 2442 2443 /** 2444 * IF 函数。 2445 */ 2446 public static QueryColumn if_(QueryCondition condition, String trueColumn, String falseColumn) { 2447 return new IfFunctionQueryColumn(condition, new QueryColumn(trueColumn), new QueryColumn(falseColumn)); 2448 } 2449 2450 /** 2451 * IF 函数。 2452 */ 2453 public static QueryColumn if_(QueryCondition condition, QueryColumn trueColumn, QueryColumn falseColumn) { 2454 return new IfFunctionQueryColumn(condition, trueColumn, falseColumn); 2455 } 2456 2457 /** 2458 * IF 函数。 2459 */ 2460 public static <T, F> QueryColumn if_(QueryCondition condition, LambdaGetter<T> trueColumn, LambdaGetter<F> falseColumn) { 2461 return new IfFunctionQueryColumn(condition, LambdaUtil.getQueryColumn(trueColumn), LambdaUtil.getQueryColumn(falseColumn)); 2462 } 2463 2464 /** 2465 * IFNULL 函数。 2466 */ 2467 public static QueryColumn ifNull(String nullColumn, String elseColumn) { 2468 return new FunctionQueryColumn("IFNULL", new QueryColumn(nullColumn), new QueryColumn(elseColumn)); 2469 } 2470 2471 /** 2472 * IFNULL 函数。 2473 */ 2474 public static QueryColumn ifNull(QueryColumn nullColumn, QueryColumn elseColumn) { 2475 return new FunctionQueryColumn("IFNULL", nullColumn, elseColumn); 2476 } 2477 2478 /** 2479 * IFNULL 函数。 2480 */ 2481 public static <N, E> QueryColumn ifNull(LambdaGetter<N> nullColumn, LambdaGetter<E> elseColumn) { 2482 return new FunctionQueryColumn("IFNULL", LambdaUtil.getQueryColumn(nullColumn), LambdaUtil.getQueryColumn(elseColumn)); 2483 } 2484 2485 // === 构建 QueryCondition 查询条件 === 2486 2487 /** 2488 * EXIST (SELECT ...) 2489 */ 2490 public static QueryCondition exists(QueryWrapper queryWrapper) { 2491 return new OperatorSelectCondition("EXISTS ", queryWrapper); 2492 } 2493 2494 /** 2495 * NOT EXIST (SELECT ...) 2496 */ 2497 public static QueryCondition notExists(QueryWrapper queryWrapper) { 2498 return new OperatorSelectCondition("NOT EXISTS ", queryWrapper); 2499 } 2500 2501 /** 2502 * NOT (id = 1) 2503 */ 2504 public static QueryCondition not(QueryCondition childCondition) { 2505 return new OperatorQueryCondition("NOT ", childCondition); 2506 } 2507 2508 /** 2509 * 空条件。 2510 */ 2511 public static QueryCondition noCondition() { 2512 return QueryCondition.createEmpty(); 2513 } 2514 2515 // === 构建 QueryWrapper 查询 === 2516 2517 /** 2518 * SELECT queryColumns FROM table 2519 */ 2520 public static QueryWrapper select(QueryColumn... queryColumns) { 2521 return newWrapper().select(queryColumns); 2522 } 2523 2524 /** 2525 * SELECT * FROM table UNION SELECT ... 2526 */ 2527 public static QueryWrapper union(QueryWrapper queryWrapper) { 2528 return newWrapper().union(queryWrapper); 2529 } 2530 2531 /** 2532 * SELECT 1 FROM table 2533 */ 2534 public static QueryWrapper selectOne() { 2535 return select(column("1")); 2536 } 2537 2538 /** 2539 * SELECT COUNT(*) FROM table 2540 */ 2541 public static QueryWrapper selectCount() { 2542 return select(count()); 2543 } 2544 2545 /** 2546 * SELECT COUNT(1) FROM table 2547 */ 2548 public static QueryWrapper selectCountOne() { 2549 return select(count("1")); 2550 } 2551 2552 /** 2553 * SELECT * FROM table 2554 */ 2555 private static QueryWrapper newWrapper() { 2556 return new QueryWrapper(); 2557 } 2558 2559 // 构建原生 SQL 条件 2560 2561 /** 2562 * 构建原生查询条件。 2563 */ 2564 public static QueryCondition raw(String raw) { 2565 return new RawFragment(raw); 2566 } 2567 2568 /** 2569 * 构建原生查询条件,并附带参数。 2570 */ 2571 public static QueryCondition raw(String raw, Object... params) { 2572 return new RawFragment(raw, params); 2573 } 2574 2575 2576 /** 2577 * 分组值拼接 2578 */ 2579 public static QueryColumn groupConcat(QueryColumn columnX) { 2580 return new FunctionQueryColumn(GROUP_CONCAT,columnX); 2581 } 2582 2583}