日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Elixir Ecto: 范围数据类型

發(fā)布時(shí)間:2023/12/4 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Elixir Ecto: 范围数据类型 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

PostgreSQL 9.2 以來(lái), 可以用特定的操作符和函數(shù)存儲(chǔ)和查詢一個(gè)值的范圍. 這是一個(gè)非常不錯(cuò)的特性, 比如在電子商務(wù)應(yīng)用程序方面, 可以用一個(gè)字段 price_range 來(lái)替代 min_price, max_price 表示一個(gè)價(jià)格范圍.

在Ecto中使用范圍數(shù)據(jù)類型

價(jià)格范圍的表示方法如下

[0, 45.67] [30.04, 98.50] [100, 500]

我們可以用范圍操作符來(lái)查詢一個(gè)值的范圍

2.5 <@ numrange(1.50,7)

Postgresql 支持如下范圍類型

  • int4range?整數(shù)方位

  • int8range?—?大整數(shù)范圍

  • numrange?—?十進(jìn)制數(shù)字范圍(浮點(diǎn))

  • tsrange?—?不帶時(shí)區(qū)的時(shí)間戳范圍

  • tstzrange?—?帶時(shí)區(qū)的時(shí)間戳范圍

  • daterange?—?日期范圍

Ecto 本身為了兼容各個(gè)數(shù)據(jù)庫(kù), 并沒(méi)有支持Postgresql 特有的Range數(shù)據(jù)類型, 但Ecto為我們提供了一個(gè)自定義數(shù)據(jù)類型的方法. 下面我們創(chuàng)建一個(gè) NumRange 類型, 底層用了Postgrex適配器的%Postgrex.Range{}結(jié)構(gòu)

defmodule App.NumRange do @behaviour Ecto.Typedef type, do: :numrangedef cast([lower, upper]) do{:ok, [lower, upper]}enddef cast(_), do: :errordef load(%Postgrex.Range{lower: lower, upper: nil}) do{lower, _} = lower |> to_float{:ok, [lower, nil]}enddef load(%Postgrex.Range{lower: lower, upper: upper}) do{lower, _} = lower |> to_float{upper, _} = upper |> to_float{:ok, [lower, upper]}enddef dump([lower, upper]) do{:ok, %Postgrex.Range{lower: lower, upper: upper, upper_inclusive: false}}enddef dump(_), do: :errordefp to_float(value) dovalue |> Decimal.to_string |> Float.parseend end

在模型和遷移腳本中中使用這個(gè)自定義數(shù)據(jù)類型

模型

defmodule App.Product do use App.Web, :modelschema "products" dofield :price_range, App.NumRangetimestampsend end

遷移腳本

defmodule App.Repo.Migrations.Product do use Ecto.Migrationdef change docreate table(:products) doadd :price_range, :numrangetimestampsendend end

范圍查詢

defmodule App.ProductQuery do import Ecto.Queryalias App.{Repo, Product}def within_price_range(price) doquery =from p in Product,where: fragment("?::numeric <@ ?", ^price, p.price_range)query |> Repo.allend end

關(guān)于方位邊界的問(wèn)題, 和數(shù)學(xué)中的范圍符號(hào)是一樣的:

  • [ 包括下邊界

  • ( 不包括下邊界

  • ] 包括上邊界

  • ) 不包括上邊界

例子

# 創(chuàng)建表 create table products(id int, price_range numrange); # 插入數(shù)據(jù) INSERT INTO products VALUES(1, '[10.0, 100.0]') INSERT INTO products VALUES(1, '[200.0, 300.0]') INSERT INTO products VALUES(1, '[400.0, 500.0]') INSERT INTO products VALUES(1, '[600.0, 700.0]') # 查詢 SELECT * FROM products; +------+--------------------------------------------------------+ | id | price_range | |------+--------------------------------------------------------| | 1 | NumericRange(Decimal('10.0'), Decimal('100.0'), '[]') | | 1 | NumericRange(Decimal('200.0'), Decimal('300.0'), '[]') | | 1 | NumericRange(Decimal('400.0'), Decimal('500.0'), '[]') | | 1 | NumericRange(Decimal('600.0'), Decimal('700.0'), '[]') | +------+--------------------------------------------------------+ # 過(guò)濾 SELECT * FROM products WHERE price_range::numrange @> 99.0 +------+-------------------------------------------------------+ | id | price_range | |------+-------------------------------------------------------| | 1 | NumericRange(Decimal('10.0'), Decimal('100.0'), '[]') | +------+-------------------------------------------------------+

參考資料

  • 關(guān)于 Postgresql 的范圍數(shù)據(jù)類型, 參考 范圍類型

  • Postgresql 范圍操作符

總結(jié)

以上是生活随笔為你收集整理的Elixir Ecto: 范围数据类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: av中出| 二区在线观看 | 国产三级日本三级在线播放 | 免费在线毛片 | 又黄又刺激的视频 | 色片免费看| 午夜不卡福利视频 | 国产真实生活伦对白 | 日韩有码中文字幕在线观看 | 精品婷婷色一区二区三区蜜桃 | 日韩av手机在线播放 | 狠狠鲁狠狠干 | 尤物videos另类xxxx | 日韩av中文在线 | 久久久久久久影视 | 欧美色女人 | av黄色影院 | 又污又黄的视频 | 18成人免费观看网站 | 欧美日韩成人免费观看 | 无码国产精品一区二区高潮 | 欧美色亚洲色 | 久久中文字 | 欧美日韩激情在线一区二区三区 | 琪琪色在线观看 | 影音先锋在线观看视频 | 久久久久久久av | 亚州av在线播放 | 久久机热这里只有精品 | 国产黄色片在线观看 | 一区二区高清在线 | 九九色九九 | 欧美日韩a级 | 国产91免费在线观看 | 日本福利一区二区 | 涩涩网站在线看 | 欧美精品性视频 | 97色在线 | 亚洲综合天堂 | www.555国产精品免费 | 天天在线观看 | 摸大乳喷奶水www视频 | 人妻熟女一区二区三区 | 中文字幕一区二区人妻痴汉电车 | 欧美福利视频在线观看 | 深夜在线网站 | 97免费超碰 | 欧美成人精品一区二区免费看片 | 福利在线一区二区 | 欧美aⅴ | 亚洲国产精品成人无久久精品 | 欧美性猛交ⅹ乱大交3 | 日韩超碰在线 | 久久久久久久久久久久久久av | 亚洲一区二区三区播放 | 日本亚洲免费 | 成人免费看片载 | 一区二区三区在线视频观看 | 欧美熟妇毛茸茸 | 国产九九精品 | 人妻中文字幕一区 | 少妇精品一区二区三区 | 你懂得在线视频 | 涩涩99| 亚洲日本国产精品 | 看片在线观看 | 日本中文字幕视频在线 | 永久免费看片在线观看 | 欧美日韩国产区 | 一区二区三区四区欧美 | 日韩美女视频在线观看 | 娇小萝被两个黑人用半米长 | 超碰av在线 | 久草视频在线观 | 中文字幕在线观看高清 | 久久人人超碰 | 中日韩毛片 | 午夜窝窝 | 欧美三级欧美成人高清 | 久久久久久亚洲av无码专区 | 亚洲精品天堂网 | 免费视频一二三区 | 污污视频网站在线 | 欧美大片高清免费观看 | 久久久老司机 | 99久久99久久 | 亚洲4438| 国产无套粉嫩白浆内谢 | 久久婷婷五月国产色综合激情 | 婷婷俺也去 | 欧美大片免费高清观看 | 日本在线观看一区 | 欧美日韩高清一区二区 | 99国产视频 | 最新中文字幕 | 色香av | 超碰97久久| 四虎影视最新网址 | 国产福利片一区二区 |