[英]How do I insert values of different type to columns in my table?
問題標題可能聽起來很荒謬,但我會用下面的示例表解釋我想做什么:
+------------+------------+----------------+----------+-------------------------+
| recvtime | entitytype | attrname | attrtype | attrvalue |
+------------+------------+----------------+----------+-------------------------+
| 2019-05-27 | Noise | measurand | Number | 51.7 |
| 2019-05-27 | Noise | sonometerClass | Text | 1 |
| 2019-05-27 | Noise | name | Text | City Centre |
| 2019-05-27 | Noise | longitude | Number | -8.65915 |
| 2019-05-27 | Noise | latitude | Number | 41.1591 |
| 2019-05-27 | Noise | dateObserved | DateTime | 2016-05-24T18:38:15.00Z |
+------------+------------+----------------+----------+-------------------------+
現在想要僅向attrname
和attrvalue
列插入更多值,其中值對應於以下內容:
+----------------+-------------------------+
| attrname | attrvalue |
+----------------+-------------------------+
| measurand | 38.7 |
| sonometerClass | 2 |
| name | London Street |
| longitude | -8.603257 |
| latitude | 41.183778 |
| dateObserved | 2016-05-24T18:38:15.00Z |
+----------------+-------------------------+
我如何在SQL中實現這一點? 我真的不介意保留所有其他列的值(即重復它們的值)。
編輯
雖然我承認Gordon Linoff的答案,但它不能解決我的問題,因為這些值實際上是從表單的csv文件中讀取的:
measurand,sonometerClass,name,longitude,latitude,dateObserved
38.7,2,London Street,-8.603257,41.183778,2016-05-24T18:38:15.00Z
90.4,1,Hospital de S. Joao,-8.603257,41.183778,2014-07-12T6:18:15.00Z
59.3,0,City Campus,-8.594866,41.178031,2014-08-12T16:10:10.00Z
64.5,1,ABC Beach,-8.607085,41.15001,2015-10-11T16:10:10.00Z
這些值不是直接來自用戶輸入,而是從csv文件中讀取,其形式如上所述。
EDIT 2:
我知道我會使用postgres copy
命令,實際上我在python腳本中使用了postgres copy_from
。 我的特定問題是從使得用於每一行的CSV文件讀取的值csv
文件,值插入到attrvalue
與對應的列attrname
更新,因此:
For line1: 38.7,2,London Street,-8.603257,41.183778,2016-05-24T18:38:15.00Z
我得到以下對應( attrname
設置為like):
measurand = 38.7
sonometerClass = 2
name = London Street
longitude = -8.603257
latitude = 41.183778
dateObserved = 2016-05-24T18:38:15.00Z
同樣的,
For line2: 90.4,1,Hospital de S. Joao,-8.603257,41.183778,2014-07-12T6:18:15.00Z
我得到以下內容:
measurand = 90.4
sonometerClass = 1
name = Hospital de S. Joao
longitude = -8.603257
latitude = 41.183778
dateObserved = 2014-07-12T6:18:15.00Z
所有其他列保持原樣。
我的第一個猜測是:
insert into t (recvtime, entitytype, attrname, attrtype, attrvalue)
values ('2019-05-27', 'Noise', 'measurand', 'number', '38.7'),
('2019-05-27', 'Noise', 'sonometerClass', 'text', '2'),
('2019-05-27', 'Noise', 'name', 'text', 'London Street'),
('2019-05-27', 'Noise', 'longitude', 'number', '-8.603257'),
('2019-05-27', 'Noise', 'latitude', 'number', '41.183778'),
('2019-05-27', 'Noise', 'dateobserved', 'datetime', '2016-05-24T18:38:15.00Z');
您可以使用列特定查詢插入記錄,如下所示:insert into table_name(attrname,attrvalue)values(“dateObserved”,“2016-05-24T18:38:15.00Z”);
在這里,將值替換為您要插入的預期值。 注意:確保在此表中沒有主鍵時執行此查詢。 如果任何列上都存在主鍵,我們還需要使用唯一值添加該列
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.